读书人

二维数组与行指针有关问题

发布时间: 2013-07-04 11:45:32 作者: rapoo

二维数组与行指针问题
定义二维数组后,比如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地址相同,它们三个都不能比较。

读书人网 >C语言

热点推荐