wuta 发表于 2018-12-31 14:33:21

有人帮分析下马

#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是占一个字节)
页: [1]
查看完整版本: 有人帮分析下马