您的位置:首页 > 编程语言 > C语言/C++

int *ptrl=(int*)(&a+1); int *ptr=(int*)((int)a+1) 这两个定义有什么区别

2016-11-22 13:39 381 查看
int main()

{

 int a[4] = { 1, 2, 3, 4 };

 int *ptr1 = (int *)(&a + 1);

 int *ptr2 = (int *)((int)a + 1); 

 printf( "%x,%x", ptr1[-1], *ptr2);

 return 0;

}

这是源代码,输出结果是4,20000000, 第一个ptr[-1]是ptr偏移-1位, &a是取数组a的地址,+1是加上1*sizeof(a),

指向数组a后面的地址,ptr[-1]就是4;   第二个在小端存储器上假设内存是从地址0开始存储的,

00000000 :01 00 00 00 02 00 00 00

00000008: 03 00 00 00 04 00 00 00

a的值是0000000000强制转化为int型后就是值00000000加1就是单纯的加1, 为00000001,转化为地址,指向的就是

00 00 00 02 00 00 00 00 %x输出4个字节02 00 00 00
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言