黑马程序员技术交流社区
标题:
求讲解
[打印本页]
作者:
张小景
时间:
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