C语言求输出结果

假定x的地址是0x5f00,且假定int占2个字节。
int x=5, *p = &x;
printf(“%p %d %d %d %d”, p, *p+2,**&p, 3**p, p+4);
注:格式化输出中的p为指针值,以十六进制方式输出。所有编译系统都支持这种格式。要注意如果将%p改成%d,在系统中可能会出现错误。

楼主你好。
p为0x5f00,按%p打印p的话应该是00005F00(32位系统)
*p+2为x+2即7。(注意*的优先级比+高,先取值再+2)
**&p也就是x为5(*&其实就抵消了)
3**p就是3*x为15
p+4是一个地址,按理说应该按照%p来打印,%d打印的话应该是0x5f00换算成十进制即24320再+4*sizeof(int),也就是24320+4*2=24328。(注意这里p+4那个4是4倍的sizeof(int))
所以最终结果应该是
00005F00 7 5 15 24328
我相信我的是正确结果。

试验了下:
#include <stdio.h>
void main(){
int x=5, *p = &x;
printf("%p %d %d %d %d\n", p, *p+2,**&p, 3**p, p+4);
}
输出:
0012FF44 7 5 15 1245012

这是在x的地址为0x12ff44同时int为四个字节的情况下计算出来的结果,完全符合。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-11
0017FAC0 7 5 15 1571536

你自己把x的地址换换就可以了
第2个回答  2012-12-11
0x5f00,7,7,21, 0x5f14
第3个回答  2012-12-11
0x5f00 7 0x5f00 15 24320
相似回答