黑马程序员技术交流社区
标题:
一道题,检验你的指针是否过关!
[打印本页]
作者:
LIUHENG0408
时间:
2015-11-29 12:54
标题:
一道题,检验你的指针是否过关!
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a[ ] ={1,2,3,4,5};
int *p = (int*)(&a + 1);
printf("%d \n %d \n",*(a + 1),*(p - 1));
}
1.请问打印的结果是什么?
作者:
杰杰
时间:
2015-11-29 20:18
2 5吗???
作者:
外号狐狸
时间:
2015-11-29 23:06
&a+1 确实涨知识,搞清楚了就知道为什么是5。谢谢您~~
作者:
Mr.Yan
时间:
2015-11-29 23:53
2 5
&a+1越界,P-1取回第五个元素地址*一下取值得5
作者:
罗文强
时间:
2015-11-30 00:08
同楼上!
作者:
Yip-Jun
时间:
2015-11-30 00:19
应该是 2 ---- 5
作者:
长厢厮守℡
时间:
2015-11-30 08:50
这题好有迷惑性~~~
作者:
lujia1010
时间:
2015-11-30 09:53
的确 是 2和5
作者:
cherrycool
时间:
2015-11-30 10:04
int a[ ] ={1,2,3,4,5};
int *p = (int*)(&a + 1);
printf("%d \n %d \n",*(a + 1),*(p - 1));
printf("-----------------------\n");
printf("%p\n",a);
printf("%p\n",&a);
printf("%p\n",a+1);
printf("%p\n",a+2);
printf("%p\n",a+3);
printf("%p\n",a+4);
printf("%p\n",&a+1);
printf("%p\n",p-1);
printf("%p\n",p);
printf("%lu\n",sizeof(int*));
printf("%p\n",(int*)1);
复制代码
结果如下:2
5
-----------------------
0x7fff5fbff770
0x7fff5fbff770
0x7fff5fbff774
0x7fff5fbff778
0x7fff5fbff77c
0x7fff5fbff780
0x7fff5fbff784
0x7fff5fbff780
0x7fff5fbff784
8
0x1
Program ended with exit code: 0
&a+1越界了,*(a+1)是数组的第二个元素,跟指针p没有关系
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2