自动匹配数组的大小
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int a[]={1,2,3,4,5,6,7,8,9};
int t;
for(t=0;t<sizeof a/sizeof a[0];t++)
printf("a[%d]里存放的是%d\n",t,a[t]);
return 0;
}
sizeof a/sizeof a[0]中sizeof a是数组a的总大小。
sizeof a[0]是一个元素的大小,相处得到数组元素个数。
指定初始化器
#include <stdio.h>
#include <stdlib.h>
#define s 12
int main(int argc, char *argv[]) {
int a[s]={31,28,[4]=4,6,8,[1]=1};
int i;
for(i=0;i<s;i++)
printf("a[%d]存放的是%d\n",i,a[i]);
return 0;
}
将a[4]初始化4,a[2],a[3]未赋值为0,往后为a[5],a[6],
起初a[1]赋值为28,后面出现[1]=1,前面的28被覆盖,a[1]=1;
数组边界
#include <stdio.h>
#include <stdlib.h>
#define size 4
int main(int argc, char *argv[]) {
int v1=44;
int a[size];
int v2=88;
int i;
printf("v1=%d , v2=%d\n",v1,v2);
for(i=-1;i<=size;i++)
{a[i]=2*i+1;}
for(i=-1;i<7;i++)
{printf("%2d %d\n",i,a[i]);
printf("a[%d]的地址%p\n",i,&a[i]);
}
printf("v1 = %d,v2 = %d \n",v1,v2);
printf("v1 = %p,v2 = %p \n",&v1,&v2);
return 0;
}
v1的地址和a[6]的地址相同,
v2的地址和a[-1]的地址相同。
正确的下标范围是0<[]=定义的大小。
使用越界的数组下标会导致程序改变其他量的值。