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
{
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
相关文章推荐
- int *ptr=(int*)(&a+1);
- (int&)a 与 (int)&a 有什么区别!疑惑!!!!公司应聘考试题目!
- int *ptr=(int *)(&a+1) 与int a[5]={1,2,3,4,5} 指针的变动
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- int *ptr=(int *)(&a+1)
- 取数组地址引发的血案(int*)(&a+1);(int*)((int)a+1);
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- int *ptr=(int *)(&a+1)问题的探讨
- int *ptr=(int *)(&a+1)
- int *ptr=(int *)(&a+1)问题的探讨
- 高通笔试题int *ptr=(int *)(&a+1)
- 关于int *ptr=(int *)(&a+1)问题的探讨
- 强制转化 (int)、(int&)和(int*)的区别
- (int*) 和 (int&)的区别
- c语言中定义结构体指针并指向一片内存空间和直接定义一个结构体变量的区别 Node *p=(Node *)malloc(sizeof(Node)); 和 Node p 两个有什么区别??? Node是一
- int *ptr=(int *)(&a+1)(面试题)
- mysql 中int和integer有什么区别
- int *ptr=(int *)(&a+1)