c缺陷与陷阱笔记-第三章 语义陷阱
1.关于数组和数组指针
数组的名字默认是常量指针,值不能改变的,例如
int a[]={1,2,3,...},这个a的类型时int *,所以如果有int *p,那么a=p是合法的,其他的指针类型,例如char *p=a都是不合法的
2维或者多维数组的指针声明,例如2维数组 int a[12][31],那么声明数组的指针应该是 int (*p)[31],p是一个数组指针,它指向的数组有31个int元素,p的实际类型应该是int**的,所有把int*类型赋值给int**类型时错误的,例如
int a[10];
int (*p)[10];
p=a;//是错误的
正确使用数组指针应该是:
int a[12][31];
int (*p)[31];
for(p=a;p<&a[12];++p)
{
int *day=*p;
for(;day<&(*p)[31];++day)
对*day操作
}
上述中,p和a都是int**类型的,a[12]是int*类型的,所以要&a[12],*p是int*类型的,代表 1维数组int [31]的数组名或指针