黑马程序员技术交流社区

标题: 一道题,检验你的指针是否过关! [打印本页]

作者: 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
  1. int a[ ] ={1,2,3,4,5};
  2.     int *p = (int*)(&a + 1);
  3.     printf("%d \n %d \n",*(a + 1),*(p - 1));
  4.     printf("-----------------------\n");
  5.     printf("%p\n",a);
  6.     printf("%p\n",&a);
  7.     printf("%p\n",a+1);
  8.     printf("%p\n",a+2);
  9.     printf("%p\n",a+3);
  10.     printf("%p\n",a+4);
  11.     printf("%p\n",&a+1);
  12.     printf("%p\n",p-1);
  13.     printf("%p\n",p);
  14.     printf("%lu\n",sizeof(int*));
  15.     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