假定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,在系统中可能会出现错误。
C语言求输出结果
答案:4 悬赏:30 手机版
解决时间 2021-12-31 00:58
- 提问者网友:半生酒醒
- 2021-12-30 21:34
最佳答案
- 五星知识达人网友:十鸦
- 2021-12-30 23:05
楼主你好。
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
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为四个字节的情况下计算出来的结果,完全符合。
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
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楼网友:等灯
- 2021-12-31 02:36
楼主注意啦! 首先你的scanf中不需要\n,这个东西,这是错误的写法。只要写: scanf("%d",n); 而你下面的是一个while循环,所以当然会循环的输出的,知道你的n--为0,也就是while()循环中的条件为假时,就停止循环。 所以结果不但是八,而是算出来的五个值。和、呵呵
- 2楼网友:蕴藏春秋
- 2021-12-31 01:10
0x5f00,7,7,21, 0x5f14
- 3楼网友:患得患失的劫
- 2021-12-30 23:45
0017FAC0 7 5 15 1571536
你自己把x的地址换换就可以了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯