问:打印结果是什么?p=(int*)(&a+1)是不是等价于*p=a[1]?

如题所述

输出的第一个是(a-1)在内存中的地址,第二个是p指针减1后所指向的数

p=(int*)(&a+1)明显是不等价于*p=a[1]。。。

p=(int*)(&a+1)的意思是把a的地址加1赋值给指针p。也就是说p指在a[]的后面,即a[4]之后的地址。

输出那一句改成printf("%d %d\n",a[1],*(p-4)); 输出就是2 2了

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-21
输出是2,5。*(a+1)不用说了;因为a==&a[0],&a就是整个这一行的指针,&a+1就是下一行的指针(不过这里没有下一行而已),实质就是&a+1指向了5后面的位置;把它强制为int *型后赋给p,p-1就只向前挪动1个int数据的空间,所以p-1指向了5,*(p-1)自然就是5。本回答被网友采纳
第2个回答  2016-06-21
打印结果分别是:2, 1
p=(int*)(&a+1)等价于*p=&a[1];注意p是指针,指向的地址,故要取a[1]的地址,前面加个取地址符&
第3个回答  2016-06-21

运行结果是:

2,5

#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
int *p;
p=(int *)(&a+1);
printf("%d,%d\n",*(a+1),*(p-1));
return 0;
}