鱼C论坛

 找回密码
 立即注册
查看: 1279|回复: 1

[已解决]有人帮分析下马

[复制链接]
发表于 2018-12-31 14:33:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
main()
{    char c;
     while((c=getchar())!='?')
     putchar(--c);
}
运行时,如果从键盘输入:Y7N7<回车>,则输出结果为(为什么为X)
#include"stdio.h"
main()
{    char*p="abcdefgh",*r;
     long*q=;
     q=(long*)p;
     q++;
     r=(char*)q;
     printf("%s\n",*r);
}
为什么输出结果为efgh?
最佳答案
2019-1-1 09:51:51
首先,第一个问题,我在vc6编译运行得到结果是 X6M6<水平制表符>  这个分析还是比较简单,getchar遇见回车开始读字符,每次读一个给c,如果不是问号,就对c-1,Y-1自然是X,7-1是6, N-1是M ,回车-1是水平制表符。没有?循环不退出继续等待用户输入。
第二个问题,在楼主的机器上,long类型应该占4个字节,long* 指针+1 那么其指向就后移4个字节,所以是指向了e的位置。(char是占一个字节)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-1 09:51:51 | 显示全部楼层    本楼为最佳答案   
首先,第一个问题,我在vc6编译运行得到结果是 X6M6<水平制表符>  这个分析还是比较简单,getchar遇见回车开始读字符,每次读一个给c,如果不是问号,就对c-1,Y-1自然是X,7-1是6, N-1是M ,回车-1是水平制表符。没有?循环不退出继续等待用户输入。
第二个问题,在楼主的机器上,long类型应该占4个字节,long* 指针+1 那么其指向就后移4个字节,所以是指向了e的位置。(char是占一个字节)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 04:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表