【发布时间】:2011-07-08 01:31:57
【问题描述】:
这是一个代码,它打印二维数组的第一个元素的地址,然后加 1。虽然所有 4 个基地址都相同,但它们加 1 显然不会给出相同的结果,因为它们不同“类型”。我可以找出一些的类型(如果它们是正确的),但不是全部。
int main()
{
int array[4][3];
printf("array %u\n",array); //of type int(*)[3]
printf("array+1 %u\n",array+1);
printf("&array %u\n",&array); //....???
printf("&array+1 %u\n",&array+1);
printf("array[0] %u\n",array[0]); //of type int*
printf("array[0]+1 %u\n",array[0]+1);
printf("&array[0] %u\n",&array[0]); //....???
printf("&array[0]+1 %u\n",&array[0]+1);
}
能否详细解释每个基地址的“类型”,以便了解加1后涉及的指针运算。下面给出gcc机器的示例输出以供快速参考。
array 3214383040
array+1 3214383052
&array 3214383040
&array+1 3214383088
array[0] 3214383040
array[0]+1 3214383044
&array[0] 3214383040
&array[0]+1 3214383052
【问题讨论】: