#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
的一些值来解释它。
答案 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)。