int a【】={5,15,34,54,14,2,52,72};
int *p=&a【5】;
则p【-2】的值是?
答案54
a[5]是脚标为5的元素,a[0] 是5 a[1]是15 a[2]是34 a[3]是54 a[4]是14 a[5]是2 。
&是取地址,所以&a[5]是 a[5]的地址值,是2元素所在的地址。
p指针指向2元素的地址。 p[-2]相当于*( p-2) 指针往后移动两个位再取值。 所以是54
54
int main()
{
int a[]{ 5,15,34,54,14,2,52,72 };//这句初始化数组数量以及数值
int* p = &a[5];//这句 定义一个指针p 然后让p = &a[5],其中 &a[5] 分解说明,第一. a[5] = 数组a中的第5个元素的数值取出来,注意0为第一个元素以此内推,所以 a[5] =2 ,第二. &a[5] = 显然多了一个&符号,在这里可以理解为取址符号,就是说 我不要a[5]里面的值了,我要的是存放a[5]这个值的地址是多少给我放到p指针里面!
p-2 = 既然知道了p现在为上方元素中第五个元素的地址,那么,- 2 自然就得到了54,说明:(数组元素地址是连续的 p在这里为int类型指针,int数组元素一个元素占位四个字节,指针p - 2也就相当于 p当前位置 - 去两个元素,自然就是 54的位置)
printf("%d", *(int*)(p - 2));//读出结果为 54 对于初学者,怕说的你不明白,稍微详细点,不过多尝试测试 理解,也不是那么难理解
system("pause");
}