黑马程序员技术交流社区

标题: 求讲解 [打印本页]

作者: 张小景    时间: 2016-6-3 21:34
标题: 求讲解
int a[]={1,2,3,4,5};
int *p=(int*)(&a+1);
printf("%d,%d\n",*(a+1),*(p-1));
求打印的值为多少

作者: 冬以    时间: 2016-6-4 23:32
*(a + 1)为2,后面的那个不怎么看的懂
作者: 1871037345    时间: 2016-6-5 09:13
本帖最后由 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]));
自己测试一下吧,实在不明白就把数组的存储再看一遍,尽量自己找答案

作者: 浮云我想听你说    时间: 2016-6-5 10:52
2 5 ....   &a   的意思是数组a的地址   p指向
作者: jdc123    时间: 2016-6-5 18:36
后边那个感觉是指a的地址,用%d不合适吧,是不是少打了个*,已经是二级指针了
作者: dongkuan    时间: 2016-6-6 23:46
a代表第0个元素的地址,&a代表整个数组的地址,意义不同
*(a+1)代表第0个元素的向后移1,答案是2
(&a+1)表示整个数组向后移1,如果后面有6,*p=6
*(p-1)再向左移动一位,答案是5

作者: vivi342863    时间: 2016-6-7 22:52
2,5   看了半天,,,,,之前讲的都忘了= =.
作者: dayuanzhang    时间: 2016-6-10 22:23
我也是来刷币 楼主请原谅




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2