当前位置:编程学习 > C/C++ >>

C语言,谁能解释下这条语句啊? 没分了,希望大家能回答下 ,谢谢~

#include <stdio.h> void alien_say(char * p) { while (putchar(*(p += *(p + 1) - *p))); } int main() { return alien_say("BETHO! Altec oh liryom(a loadjudas!) dowd."), 0; } 就是这个语句,网上看到的说是运行结果是输出一个 hello world,可我照着编辑了,输出结果怎么是Hc,还有在这里面也没看见Hc俩个字符啊,难道是进行转化了的吗
追问:怎么我输出是Hc  ,你看我编辑的对吗 ?
答案:1运行结果是:
Hello world!
2 来分析第一次while循环的执行情况,即输出第一上字母'H'的情况,其他同理。
p += *(p + 1) - *p
相当于
p = p+*(p + 1) - *p
   =p+'E'-'B'
   =p+3
因此指针p从指向第一个字母(编号为0)'B'变为指向第四个字母(编号为3)'H',putchar(*(p += *(p + 1) - *p))即输出'H'。
其他:结果是这样的
“Hc”中的“H
”c“是”Altec“中的
接着就是空格,停止 确实是5行3列。但是你读入的语句 scanf( 分析
    return alien_say("BETHO! Altec oh liryom(a loadjudas!) dowd."), 0;   
//逗号表达式,是取最右边的结果,此句相当于两句
//alien_say("BETHO! Altec oh liryom(a loadjudas!) dowd."); 
//return 0;
现在来看
void alien_say(char * p)
{
    while (putchar(*(p += *(p + 1) - *p)));
}
先来看输出的第一个字符 *(p+=*(p+1)-*p)));
里面的表达式 p+=*(p+1)-*p;  其中*(p+1)为E, *p为B,   E-B结果是3 
所以p+=3; p向后移动3个位置,指向第4个字符 H
再进行上面的运算  *(p+1)为O, *p为 H  O-H结果为6
p+=6指针再向后移动6个位置,指向 e...
 and so on.... 输出确实是:Hello world!
关键是对 *(p += *(p + 1) - *p) 的理解。其中p+=*(p + 1) - *p表示指针的移动,而移动的位置由指针当前位置后一个字母减当前所指字母所得。如循环第一次时,由*(p + 1) - *p即 E-B得到3,所以p+=*(p + 1) - *p也就相当于p+=3,即指针向后移动3个位置,第一个输出字母即为H。照此类推。。。 hc应该是从BETHO! Altec oh liryom(a loadjudas!) dowd这个字符串里出来的 
⊙﹏⊙b汗(我这运行输出地是hello world!)。 我用的cfree5.0 

上一个:[C语言]请问下面这些句子是什么意思?谢谢大家
下一个:C语言关于输入scanf或者getchar剔除回车的问题

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,