常量数组和变长数组
一般情况下,在创建数组时,数组的大小是常量,当设为变量时,会出现报错。这是因为使用的编译器不支持C99的变长数组,常见的编译器如Visual Studio就不支持变长数组,但如果使用linux操作系统,它支持C99,也就是可以使用变长数组。(变长数组不能进行初始化,如果想使用变长数组,可以在虚拟机下载linux操作系统)
初始化常量数组
int a[10]={0,1,2,3,4,5,6,7,8,9};//完全初始化
int b[10]={2,3};//不完全初始化
一维数组的使用
创建一维数组
int arr[100]={1,2,3,4,5,6};//创建一维数组,如arr[0]=1,arr[1]=2
printf("%d\n",arr[4]);//[]下标引用操作符,arr,4时[]的两个操作数
int s=sizeof(arr);//数组的总长度,sizeof是用来计算长度的
int sz=sizeof(arr)/sizeof(arr[0]);//计算数组元素个数的写法
打印一维数组的值
for(int i=0;i<sz;i++)
{
printf("&arr[%d]=%p\n",i,&arr[i]);
}
%p - 打印地址(16进制)
%d - 打印整数(10进制)
各种含义
int *p=&arr[0];//将arr[0]的地址赋给p
&arr[i]==p+i;//&arr[i]等同于p+i,都是指指针存放的地址(指针存放的地址是连续的)
二维数组
创建二维数组
int arr[][5]=={1,2,3,4,5,6};//不完全初始化
int arr[3][5]=={1,2,3,4,5,6};//不完全初始化
int arr[3][5]={{1,2},{4,5},{5,6}};//把1、2放第一行,4、5放第二行,5、6放第三行
char ch[3][7];
int arr[4][5]={0};//初始化了第一个数组为0,其余数组初始化默认为0
二维数组创建时,行数可以忽略不写。并且所有维度的数组其第一个方括号的内容可忽略。
数组越界
数组的下标是有范围限制的,数组的下规定是从0开始,如果数组有n个元素,最后一个元素的下标就是n-1。所以,如果下标小于0或大于n-1,就是数组越界访问了。一般编译器不会对此报错