数组:
什么是数组:数组就相同类型变量的组合,它是一种指定义变量的方法。
一维数组:把变量排成一排。
定义:类型 数组名[数量]:
int arr[5]; // 数字表示的是变量的数量
int num1,num2,num3,num4,num5;
注意:数组定义后,默认值不确定。
使用:数组名+编号(下标)
arr[0],arr[1],arr[2],arr[3],arr[4] // 数字表示编号
注意:数组的编号从零开始,0~数量-1
遍历:使用for循环配合,使用循环变量当做数组的下标。
初始化:类型 数组名[数量] = {v1,v2,v3,v4};
1、如果初始化数据超过数组的长度,多余的值会被忽略,而且会有警告产生。
2、如果初始化数据不够,则补零。
3、空的大括号表示数组全部初始化零。
4、当对数组进行初始化,数组的长度可以忽略,编译器会计算数据的个数和,
然后再告诉数组。
sizeof(arr)/sizeof(arr[0]);
二维数组:把变量排成一个方阵。
定义:类型 数组名[行数][列数];
int arr[3][4];
[][][][]
[][][][]
[][][][]
使用:数组名[行编号][列编号];
[0][0],[0][1],[0][2],[0][3]
[1][0],[1][1],[1][2],[1][3]
[2][0],[2][1],[2][2],[2][3]
遍历:使用双层for循环配合,外层循环负责遍历行,内层循环负责遍历列。
初始化:类型 数组名[行数][列数] = {{v1,v2,v3,v4},{v1,v2,v3,v4},{v1,v2,v3,v4}};
变长数组:
定长数组:数组长度在编译时就已经确定了。
变长数组:数组长度在编译时不确定,程序运行期间可根据实际情况变长,
但执行数组定义语句时,就确定下来不能再变。
优点:可以根据实际情况确定数组的长度,节约内存。
缺点:不能初始化。
数组的越界:
编译器不会检查数组的下标(不能检查,也不愿意检查),
因此使用数组越界可以越界(不会有语法错误)。
数组越界的后果:
1、一切正常。
2、脏数组。
例子:
#include <stdio.h>
int main()
{
int arr[10],i;
printf("开始初始化数组...\n");
for(i=0; i<=10; i++)
{
arr[i] = 0;
printf("------------%d\n",i);
}
printf("初始化数组结束!\n");
}
//数组长度为10 超过十个以后将0赋给i
//无限循环
3、段错误(核心已转储)
非法访问内存时被操作知道了。