数组的概念
在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式集合在一起,这些按序排列的同类数据元素的集合称为数组。
在C语言中,数组属于构造数据类型,一个数组可以分解为多个数组数组元素,这些数组的元素可以是基本数据类型或构造数据类型。因此按数组元素的类型不同,数组可分为数值数组、字符数组、指针数组、结构数组
等各种类别。
注:
1)数组中的元素的内存地址是连续的
2)同一个数组所有的成员都是相同的数据类型
一维数组
1) 语法:
数据类型 数组名[常量表达式]
- 数组名的命名规范必须满足“标识符的命名规范”
- 方括号中的常量表达式就是数组的长度,也就是数组中存储元素的个数
例如:
int a[10]
:说明数组是整型数组,有10个元素。
float b[10],c[20]
:说明数组是实型数组,数组b,有10个元素;数组c,有20个元素。
char ch[20]
:说明数组是字符数数组,包含20个元素。
2) 一维数组的初始化
定义一个数组时,需要进行初始化的操作,如果不进行初始化,则数组的内容为随机值。给数组的赋值除了用赋值语句对数组元素逐个赋值外,还可以采用初始化赋值和动态赋值(这里涉及到指针,后面会进行讲解)的方法。
int main(){
int a[5];
a[0] = 1;
a[1] = 2;
a[3] = 3;
a[4] = 4;
return 0;
}
int main() {
int a[6] = {1, 2, 3, 4, 5, 6};
int b[6] = {1, 2, 3};
int c[6] = {0};
int d[] = {1, 2, 3, 4, 5};
int e[3];
printf("%d %d",e[1],e[2]);
return 0;
}
3) 使用下标访问数组中的元素
- 下标的值必须为整型常量/变量
- 下标的值从0开始到【数组长度(定义的数组常量)-1】结束
注: 如果使用的下标值大于或者等于数组长度,程序仍然可以编译通过,但是运行的结果时未知的。
代码如下:
int main(){
int a[5] = {1,2,3,4,5};
for(int i = 0;i<5;i++){
printf("%d",a[i]);
}
printf("%d",a[5]);
return 0;
}
下面我们来看以下这张图就知道为什么我们会输出这个值:
由此图可以看出我们内存是由高地址到地址进行排列,并且在内存中每个位置都有可能存储着相应的值,这是未知的。所以当我们取的值超出了数组范围,此时会调用我们内存中的未知值,所以输出了32758。
二维数组
1)语法 :
数组类型 数组名[常量表达式1][常量表达式2]
- 我们可以将二维数组当作一个有行有列的二维矩阵
- 常量表达式1代表矩阵的行数
- 常量表达式2代表矩阵的列数
- 二维数组可以理解为由”常量表达式1“个一维数组组成的
例如:
int a[3][4]
:可以表示为一个3行4列的二维数组,数组中的元素类型为int类型。
2)二维数组的初始化
二维数组的初始化跟一维数组的初始化相差不大,并且他的存储方式跟一维数组的存储方式是一样的,他的赋值方法也有逐个赋值和初始化赋值。
int main(){
int a[2][2];
a[0][0] = 1;
a[0][1] = 2;
a[1][0] = 3;
a[1][1] = 4;
return 0;
}
int main(){
int a[2][2] = {{1,2},{3,4}};
int b[2][2] = {1,2,3,4};
int c[3][3] = {1,2,3};
printf("Output position 3 hang 3 lie: %d",c[2][2]);
int d[2][2] = {0};
int e[][2] = {1,2,3,4};
return 0;
}
3)使用下标进行数组元素的访问
- 行列下标的值必须为整型常量/变量
- 列下标的值从0开始到【数组长度(定义的数组常量)-1】结束
- 行下标的值从0开始到【数组长度(定义的数组常量)-1】结束
注: 如果使用的下标值大于或者等于数组长度,程序仍然可以编译通过,但是运行的结果时未知的。
代码如下:
int main() {
int a[2][2] = {{1, 2},{3, 4}};
printf("%d",a[2][0]);
return 0;
}
他的取值方式跟一维数组的操作方式实际上是差不多的,也是超出了数组的长度,程序不会报错,但是返回的值是未知的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)