数组_C语言快速入门与计算机二级备考
一维数组
数组概念
- 数组是一种容器,其中所有元素有相同的数据类型
- 在创建后不能改变大小
- 数组中的元素在内存中连续依次排列
- 可以出现在赋值符号的左右两边(在赋值左边的叫做左值)
定义数组
-
定义一个数组:变量类型 变量名称 [元素数量(必须是整数,可以是变量)] ;
-
例如:
int a [10];
代表名为a的数组中有10个单元,每个单元就是一个int类型的变量 -
在定义完成后,[ ]内为数组中单元的下标,例如:
a[9]=0
类似于数学上的a9=0从0开始记数,程序应当只使用有效的下标:[0,数组大小-1](否则越界的数组访问会造成问题)
例如:
a[10]=0
;这样的写入是错误的,因为a[10]
的有效下标为:0到9共10个,不包含10 -
将值赋给数组中的某一个单元:数组名[数组中的某个单元] = 某个值
例如:
a[i]=0
定义时不能使用变量,而使用时可以使用变量
-
数组的大小在c99标准中是动态的(可以用变量赋值[n]),于是可通过让用户先输入需要输入多少个数字,以此定义数组元素数量来规避越界问题
数组的初始化
-
如何初始化
在使用变量之前需要对其进行初始化,数组同理
数组变量不能赋给另一个数组,数组变量本身不能被赋值
想将一个数组所有元素移交给另一个数组,必须使用遍历
-
集成初始化
例如:
int a[ ]={2,3,4,5……};
此时我们不定义数组的具体大小,让编译器替我们数出数组大小并进行初始化
int a[10]={2};
我们可以只为数组中的几个元素赋值,编译器会自动将未被我们初始化的元素赋零
因此例子中遍历初始化每一个元素的代码也可写为
int count[number]={0};
-
集成初始化的定位
例如:
int a[10]={[0]=2,[2]=3,6};
这时,a0=2,a2=3,a3=6(这个6跟着前面的a2为下一个单元赋值)
适用于初始数据稀疏的数组
数组应用实例
-
数出数组中元素多少的代码:
//数出数组的大小 sizeof(a)/sizeof(a[0]) //用整个数组所占字节除以一个其中第一个元素所占字节,得到有多少个元素 //一旦修改数组中的初始数据,不需要修改遍历的代码
-
当使用数组作为函数的参数时,往往必须再用另一个参数传入数组的大小
在作为参数时,不能在[ ]内给出数组的大小
在作为参数时,不能再用
sizeof
来计算数组大小这些都是因为作为参数的数组实际是指针
-
使用数组的例子
int main()//这个程序能在输入十个0-9的数字后,统计各个数字出现次数 { const int number = 10;//使用常量来定义数组的大小 int x; int count[number];//定义一个数组count int i; for (i = 0; i < number; i++)//初始化数组,将数组中每一个元素赋初始值0 { count[i] = 0; //遍历数组,通常使用for循环,让循环变量i<数组长度,这样i最大正好是数组最大有效下标 } for(int cnt=0;cnt<number;cnt++) { scanf("%d", &x); if (x >= 0 && x <= 9) count[x]++;//数组参与运算 } for (i = 0; i < number; i++) { printf("%d:%d\n", i, count[i]);//遍历数组输出 } }
二维数组
-
之前所使用的只有一个下标的数组为一维数组
-
int a[i][j]
是一个二维数组,表示有着i行j列的矩阵例如:
int a[2][3]
在内存中排列为:a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
-
注意
a[i,j]
是错误的二维数组表达方式,它代表一个逗号运算,结果是a[j]
二维数组的遍历
-
二维数组有两个下标,需要两重循环进行遍历
例如:
for (i=0;i<3;i++) { for(j=0;j<5;j++) {……
二维数组的初始化
-
列数必须给出,行数可以由编译器来数,每行有一对
例如:
int a[ ][5] = { {0,1,2,3,4}, {2,3,4,5,6}, };
本文来自博客园,作者:无术师,转载请注明原文链接:https://www.cnblogs.com/untit1ed/p/18547823
本文使用知识共享4.0协议许可 CC BY-NC-SA 4.0
请注意: 特别说明版权归属的文章以及不归属于本人的转载内容(如引用的文章与图片)除外