残冰 发表于 2013-12-5 16:07:09

第一次来这还望关照

帅哥 这段代码我不明白是怎样实现的请帮忙解释一下 好吗??#include <stdio.h>
main()
{
      char *str = "I love FishC.com";
      while( *str++ != '.' )
                ;
      printf("%c", *str);
}


maomingkun 发表于 2013-12-5 16:07:10

本帖最后由 maomingkun 于 2013-12-5 17:35 编辑

这个............兄弟,俺没能领悟到你的思路,你的代码是要干什么啊?
就分析你的代码来讲,事情大概是这个样子的:
char *str="I love FishC.com";定义一个指针变量存放字符串的首地址,此时,str=字符串的首地址
while( *str++ != '.' )这句代码*和++的优先级同级,且都是右结合性,所以等同于*(str++),假设str=1,这句代码的意思就是取地址1中的内容与 '.'比较,然后str自增1。
str++和++str的区别:
str++是参与运算后str自增1;++str是自增1后再参与运算。
取第一个字符与‘.’比较,然后地址增加1,然后就是判断、循环,取第二个字符与‘.’比较,地址在增加1............直到取出的字符相等时,跳出循环,此时str的地址指向com的c(因为str++)。
因为你的循环体为空,什么都不能干,所以前面取出的字符未做处理
printf("%c", *str);为什么会只输出一个c呢?因为你用的是%c,只能输出一个字符,%s是输出字符串的。


我解释了一大堆,也不知道你能不能理解,能不能解开你心中的疑惑,不懂的可以继续追问!

叮当~ 发表于 2013-12-5 21:06:39

这段C源程序很简单,就是定义一个字符串,然后下面while(*str++!='.') ;   这句话程序上没有问题 实际表达上有点问题,我认为应该是while(*(str++)!='.') ;   才对,然后每次判断为真 就执行 分号 一次,知道判断到 点 就为假跳出while执行下面的printf("%c", *str);   这函数意思是 str字符串里的第一个字符输出

风のQ 发表于 2013-12-6 09:51:16

while(*str++ != '.');
可以翻译为
char c;
do
{
   char c = *str;
   str++;
}while(c != ''.')

风のQ 发表于 2013-12-6 09:52:29

while(*str++ != '.');
可以翻译为
char c;
do
{
      c = *str;
      str++;
}while(c != ''.')

jknfzy 发表于 2013-12-6 12:22:43

只是指针吗   为什么我看不不懂:cry啊

maomingkun 发表于 2013-12-6 18:29:02

叮当~ 发表于 2013-12-5 21:06 static/image/common/back.gif
这段C源程序很简单,就是定义一个字符串,然后下面while(*str++!='.') ;   这句话程序上没有问题 实际表达上 ...

哥们儿,*str++和*(str++)是一样的,*(指针运算符)和++的优先级相同,同时是右结合性所以...........是不是这样呢?可以看下他的汇编代码

牡丹花下死做鬼 发表于 2013-12-7 12:32:39

个人确实无法理解 这代码他 到底有什么目的的说 他干了什么事我大概还能知道课干这些事有什么用我......
页: [1]
查看完整版本: 第一次来这还望关照