黑马程序员技术交流社区

标题: 求大神解释 [打印本页]

作者: zzt244    时间: 2015-12-29 11:37
标题: 求大神解释
22.下列程序运行结果正确的是( )
int a[] = {1, 2, 3, 4, 5};
int *p = (int*)(&a + 1);
printf ("%d, %d\n", *(a+1), *(p-1));
A. 2,5      B. 2,1      C. 1,5     D. 1,2

作者: rolandzhao    时间: 2015-12-29 12:15
A  刚用VS试了
作者: yolande    时间: 2015-12-29 12:44
p的地址是相当于a5的地址。。。然后在转变成int指针 -1就回到到a4
作者: zzt244    时间: 2015-12-29 12:44
rolandzhao 发表于 2015-12-29 12:15
A  刚用VS试了

我需要解释...
作者: zzt244    时间: 2015-12-29 19:07
yolande 发表于 2015-12-29 12:44
p的地址是相当于a5的地址。。。然后在转变成int指针 -1就回到到a4

&a就是a5???
作者: foolishlovepig    时间: 2015-12-29 19:41
yolande 发表于 2015-12-29 12:44
p的地址是相当于a5的地址。。。然后在转变成int指针 -1就回到到a4

学习了,所有关于地址的,-1都会这样转换么?
作者: yolande    时间: 2015-12-29 22:48
int arr[2][2];
&arr+1 以数组大小加 相当于跳到了 第5个位置
&arr[0]+1以第一行大小加1 第3个位置
&arr[0][0]+1以一个元素为大小加1  第2个位置

arr+1 相当于&arr[0] +1
arr[0] + 1 相当于 arr[0][0] +1
arr[0][0] + 1  这个就是把那个变量的值加了1

作者: FYJKL    时间: 2015-12-29 23:24
选A吧,应该是





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