A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#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.请问打印的结果是什么?

评分

参与人数 1黑马币 +4 收起 理由
意料之外 + 4 确实很重要的,满可以的

查看全部评分

8 个回复

正序浏览
  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没有关系
回复 使用道具 举报
的确 是 2和5
回复 使用道具 举报
这题好有迷惑性~~~
回复 使用道具 举报
应该是 2 ---- 5
回复 使用道具 举报
同楼上!
回复 使用道具 举报
2     5
&a+1越界,P-1取回第五个元素地址*一下取值得5
回复 使用道具 举报
&a+1 确实涨知识,搞清楚了就知道为什么是5。谢谢您~~
回复 使用道具 举报
2   5吗???
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马