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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张小景 中级黑马   /  2016-6-3 21:34  /  1824 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int a[]={1,2,3,4,5};
int *p=(int*)(&a+1);
printf("%d,%d\n",*(a+1),*(p-1));
求打印的值为多少

7 个回复

正序浏览
我也是来刷币 楼主请原谅
回复 使用道具 举报
2,5   看了半天,,,,,之前讲的都忘了= =.
回复 使用道具 举报
a代表第0个元素的地址,&a代表整个数组的地址,意义不同
*(a+1)代表第0个元素的向后移1,答案是2
(&a+1)表示整个数组向后移1,如果后面有6,*p=6
*(p-1)再向左移动一位,答案是5
回复 使用道具 举报
后边那个感觉是指a的地址,用%d不合适吧,是不是少打了个*,已经是二级指针了
回复 使用道具 举报
2 5 ....   &a   的意思是数组a的地址   p指向
回复 使用道具 举报
本帖最后由 1871037345 于 2016-6-5 09:24 编辑


int a[]={1,2,3,4,5};         int *p=(int*)(&a+1);         
printf("*(a+1) = %d,*(p-1) = %d\n",*(a+1),*(p-1));         
printf("&a+1 = %p\n",&a+1);         
printf("p = %p\n",p);         
printf("&a = %p\n",&a);         
printf("p-1 = %p\n",p-1);         
printf("&a[4] = %p\n",&a[4]);         
printf("*((p-1) - a[0]) = %d\n",*((p-1) - a[0]));
自己测试一下吧,实在不明白就把数组的存储再看一遍,尽量自己找答案
回复 使用道具 举报
*(a + 1)为2,后面的那个不怎么看的懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马