C++指针学习(2)

int *p = (int *) 100;
printf("%d\n", p+100);//输出结果是多少?

p是一个指向int的指针, 强制初始化为内存地址为100的指针, p+100是p向下偏移100个int存储空间(4)后的地址, 强制转化成整形后应该输出100+100*4=500.

注意: 不能随意操纵p指向的内容.

int array[]={1,2,3,4,5};
int *p= int *(&array+1);
printf("%d%d\n", *(a+1), *(p-1));

a退化为a[0]的指针, 那么a+1就是指向a[1]的指针, 所以*(a+1)的结果是2;

&array是取int[5]的地址, 因此&array是指向int[5]的指针, &array+1就是偏移一个int[5]的地址, 值就是&array[4] + 4, p是将这个值强制转化成int *.

p-1就是p向左偏移个int地址, 就是&array[4] + 4 - 4 = & array[4], 那么 *(p-1) 的结果就是5.

注意: 指针加减整数n后的值并不是指针的值直接加减n, 而是指针偏移n个指针指向的内存;

原文地址:https://www.cnblogs.com/lovelyxia/p/1722168.html