计算方式如下
a + 1 = a + sizeof(int) * 1 // 因为a是指向整型的指针常量(指针常量不同于常量指针)
&a + 1 = &a + sizeof(a)* 1 //因为&a是指向数组a的指针变量
ptr - 1 = ptr - sizeof(int) * 1 //因为(&a + 1)被强制转换成了指向整型的指针变量
注:a和&a的值是一样的,但代表的意思不一样,a是数组的首个元素的地址,而&a则代表数组的首地址。
代码如下
:
#include
int main(void) {
int a[5] = {1, 2, 3, 4, 5};
int *ptr = (int *)(&a + 1);
printf("%X %Xn%X %Xn", &a + 1, &a, a, a + 1);
printf("%X %Xn", ptr, ptr - 1);
}



