赞
踩
一、基本概念
数组是一组相同类型的值被顺序地储存在一起。数组表示方法为变量名加方括号,方括号里是数组的成员数量。例如:
int arr[20]; //声明了一个 int 类型的名为 arr 包含20个成员的数组
数组的成员是从0开始编号的,所以数组的编号永远小于成员数量,这也是遍历数组时循环条件用 "<" 而不用 "<=" 的原因。 数组名加方括号和指定编号,就可以像普通变量那样为其赋值或引用这个成员。例如:
arr[10]=100;
int x=2*arr[10];
注意: 如果引用不存在的数组成员(即越界访问数组)写代码时并不会报错,有些在编译时会被发现,有些编译时也发现不了。使用数组越界是非常值得重视的问题。例如,接上面的例子:
for(int i=0;i<=20;i++)
{
printf("%d",arr[i]); //当i=20时数组越界,这是很容易犯的错误
}
数组可以在声明时(仅在声明时),使用大括号同时对每一个成员赋值;数组声明后的赋值也称为数组的初始化。例如:
int arr02[5] = {1,2,3,4,5}; //如赋值不足5个,剩余的会赋成0
当我们声明成员数量大的数组时,为防止访问时出现莫名其妙的值,可以一次性全部赋值成0(初始化成0),做法如下:
int arr03[1024]={0};
如果我们在声明时即全部赋初值,可以省略"[ ]"中的成员数,编译器会自动补上。
int arr04[]={6,7,8,9,10,11}; //可以正常编译
二、数组长度
sizeof 是一个运算符(也可以理解成是函数),它可以返回数组的字节长度。返回的具体字节长度与数组的类型、成员个数及使用的系统相关。以int arr[20]为例:
int a = sizeof(arr); //以数组名为参数,返回整个数组的字节长度
int b = sizeof(arr[0]); //以某一成员为参数,返回单个成员的字节长度
int c = sizeof(arr) / sizeof(arr[0]); //可以计算出数组的成员个数
三、多维数组
数组名称后带有多对中括号的数组称为多维数组。两对 "[ ]" 的是二维数组,三对 "[ ]" 的是三数组,依此类推。
以二维数组为例:
int arr[3][4]; //声明了一个3行4列的二维数组
二维数组也可以用{ }赋初值,{ 0 }给所有成员赋初值0。在用{ }赋初值时,为了行列显示清楚,可以多加几对大括号。举例:
int arr[3][4]={ {1,2,3,4},
{4,3,2,1},
{5,6,7,8} }; //如把内部的三对大括号拿掉也不影响赋值,带上层次更清楚。
四、附上一个遍历二维数组并计算数组字节长度的小程序:
- #include<stdio.h>
- int main(void)
- {
- //a.声明数组并赋初值
- int arr[3][4] = { {1,2,3,4},
- {4,3,2,1},
- {5,6,7,8} };
- //b.通过两重循环遍历二维数组
- for (int i = 0; i < 3; i++) //一般外层循环行(反过来也无所谓)
- {
- for (int j = 0; j < 4; j++) //内层循环列
- {
- printf(" %d", arr[i][j]); //显示数组成员的值
- }
- printf("\n"); //显示一行结束时换行
- }
- //c.计算数组字节长度等信息
- int sum = sizeof(arr);//返回整个数组字节总长度
- int a = (int)sizeof(arr) / sizeof(arr[0]); //返回数组行数
- int b = (int)sizeof(arr[0])/sizeof(arr[0][0]); //返回数组行数
- int c = (int)sizeof(arr) / sizeof(arr[0][0]); //返回数组成员数
- printf("数组总字节长%d 行%d 列%d 成员总数%d", sum,a,b,c);
- getchar();
- return 0;
- }
//运行结果:
1 2 3 4
4 3 2 1
5 6 7 8
数组总字节长48 行3 列4 成员总数12
实际上在计算机内部,二维数组的存储也是线性的没有行和列之分,一字排开,arr[0][0]是第一个,的后面是arr[0][1],接着arr[0][2],再后边arr[0][3]、arr[1][0]、arr[1][1]、......、直到arr[2][2]、arr[2][3]。推而广之,三维、四维也是一样。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。