二维数组与行指针问题
定义二维数组后,比如int a[2][3]之后,*(a+1)相当于a[1],第1行首地址,这个好理解,a+1也是第1行首地址的啊?以下程序输出以%p方式输出,a+1和*(a+1)值相同,但是如果写表达式a+1==*(a+1)则编译无法通过?
#include <stdio.h>
int main(void)
{
int a[2][3];
int (*p)[3];
p=a;
printf("%p.\n",*(a+1));
printf("%p.\n",a+1);
printf("%p.\n",*(p+1));
printf("%p.\n",p+1);
return 0;
}
输出显示*(a+1),a+1,*(p+1),p+1值都相同,但是不能执行表达式a+1==*(a+1) 和p+1==*(p+1) ??
[解决办法]
值相同而类型不同。
a+1是int(*)[3];
而*(a+1)是int[3],但C其实没有真正的数组类型,所以就变成了int*
类型不同无法比较
如果把+1去掉,a、*a都与&a地址相同,它们三个都不能比较。