c语言,程序中有点不懂,输入一个字符串和一个字符,查找该字符在字符串中首次出现的位置。

/* HELLO.C -- Hello, world */

#include "stdio.h"
#include "conio.h"
#include<string.h>

main()
{ char c,s[20],*p=s;
int n=1;
printf("input zifuchuan\n");gets(s);
printf("zifu\n");
c=getchar();
while(*p)
{if(*p==c)break;
p++;n++;

}
if(*p)
printf("字符%c首次出现在字符串%s的第个%d位置。\n",c,s,n);
else
printf("字符%c未在字符串%s中出现\n",c,s);
printf("Hello, world\n");
getch();
}
其中while(*p)和if(*p)中的*p是什么意思?

其实,楼主不明白的是:
1. if()或 while()后面的表达式是什么?
答案是: 从C语法的角度,if()或 while()后面的表达式是什么都可以。运行时(应该是编译时编译成这样子),先求整个表达式的值。结果是一个数值。 C吧这个数值看成逻辑值:白话的说,就是,如果这个值是0,就认为是 假(False),除0之外,都是真(TRUE)。
如果是真,执行接下来的代码块,否则跳过。
你可以直接写 if(i),而不必写 if(i != 0 )
2. 那么再看具体代码,while(*p)和if(*p)中的*p是什么意思?:就是判读*p是不是0 呗。楼主不了解的是,*p什么时候是0??
您需要知道:C语言字符串以0结束。
也就是说,您写 *p = "input zifuchuan";时 ,实际存内存存放的是:
‘i’ ‘n’ ‘p’ ‘u’ ‘t’ ‘ ’ ‘z’ ‘i’ ‘f’ ‘u’ ‘c’ ‘h’ ‘u’ ‘a’ ‘n’ 0
while(*p)的意思,翻译过来就是:”当p指向的字符串没有到达结束的0时“
注意:循环体里。必然有p++的移动操作
‘i’ ‘n’ ‘p’ ‘u’ ‘t’ ‘ ’ ‘z’ ‘i’ ‘f’ ‘u’ ‘c’ ‘h’ ‘u’ ‘a’ ‘n’ 0
^ ^
| |
p -------------------------------------------> p
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-13
相当于*p!=null,意思就是p指向的内容不为空
第2个回答  2012-05-13
在C语言中,这是字符串处理时常用的技巧。
这样写的程序最后的机器码很精简,充分利用到CPU本身的功能。
*p是当前p指向的字符,在字符串结尾,*p必为0。这时while或if都得出“假”,条件不成立。
不过必须指出,这样写有一个小漏洞,如果p为空指针时将出现非法操作。所以一般是这样写:
if(p&&*p)
while(p&&*p)
由于C对于逻辑操作是短路型的,所以这样就可避免对空指针的操作,程序将更加健康。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网