如何表达二维/多维阵列之间的关系指针表达式

时间:2014-07-09 14:32:01

标签: c pointers multidimensional-array

#include<stdio.h>
void main()
{
       int a[2][2][2]={1,2,3,4,5,6,7,8};
       printf("%d\t%d",*(*(*(a+1)+1)+1),a[1][1][1]);
}

代码的输出是8 8,但表达式*(*(*(a+i)+j)+k);&amp; a[i][j][k];是平等的我知道如何演变表达式a[i][j][k];但我不知道如何使用*(*(*(a+i)+j)+k);运算符&amp;运算符的适当优先级操作来演变表达式*()运营商。请使用i,j,k的一些值来解释它。

2 个答案:

答案 0 :(得分:0)

在指针算术中,
array[i] = *(array + i)
array[i][j] = *(*(array + i) + j)
array[i][j][k] = *(*(*(array + i) + j) + k)

答案 1 :(得分:0)

最初,a指向1。当您执行a+1时,它会移至5,当您取消引用(*)时,您会导致下一个+1仅将其移动到7。第二个*导致第三个+1将其移动到最后一个元素8,而最终*实际上从该地址获取值(即8)。