#include<stdio.h>
void main()
{
int a[2][2][2]={1,2,3,4,5,6,7,8};
printf("%dt%d",*(*(*(a+1)+1)+1),a[1][1][1]);
}
代码的输出是 8 8,但表达式 *(*(*(a+i)+j)+k);
和 a[i][j][k];
相等 我知道如何进化表达式a[i][j][k];
但我不知道如何使用*
运算符和()
运算符的适当优先级操作来发展表达式*(*(*(a+i)+j)+k);
。请用一些i,j,k
值来解释它。
在指针算术中,
array[i]
= *(array + i)
.
array[i][j]
= *(*(array + i) + j)
.
array[i][j][k]
= *(*(*(array + i) + j) + k)
最初,a
指向1
。当你做a+1
它移动到5
,当你取消引用(*(时,你会导致下一个+1
使其仅移动2个位置,到7
。第二个 * 使第三个+1
将其移动到最后一个元素 8
,最后一个 * 实际上从该地址获取值(即 8(。