#include "stdio.h" #include "stdlib.h" #include "string.h" void main(void) { int a[] = {1,2,3,4,5}; int *p = (int *)(&a +1); printf("%d %d\n",*(a+1),*(p-1)); }
[quote=引用 2 楼 cfjtaishan 的回复:] 首先需要了解的是a和&a的区别; a是数组名,也是数组的首地址,类型是int *; &a是数组的地址,这个地址值和a的地址值是一样的,因为都指向同一个地址;但&a的类型是int (*)[5];即&a是5个元素为单位的地址; 所以a+1是向后偏移一个int类型长度的地址,即元素2的地址; &a+1是向后偏移5 * sizeof(int)长度。 了解这些就基本上能理解输出的结果了。 p-1是向后偏移一个sizeof(int)个字节,因为p的类型是int *
首先需要了解的是a和&a的区别; a是数组名,也是数组的首地址,类型是int *; &a是数组的地址,这个地址值和a的地址值是一样的,因为都指向同一个地址;但&a的类型是int (*)[5];即&a是5个元素为单位的地址; 所以a+1是向后偏移一个int类型长度的地址,即元素2的地址; &a+1是向后偏移5 * sizeof(int)长度。 了解这些就基本上能理解输出的结果了。 p-1是向后偏移一个sizeof(int)个字节,因为p的类型是int *
69,368
社区成员
243,081
社区内容
加载中
试试用AI创作助手写篇文章吧