我有以下程序
#include <stdio.h>
#include <stdlib.h>
int main()
{
char string[30],ch,*chp;
printf("Enter Text below:");
gets(string);
printf("\n Character to find:");
ch=getchar();
chp=strchr(string,ch);
if(chp)
printf("Character %c found in string",ch);
else
printf("Character %c not found in string",ch);
getche();
}
我知道chp是这个程序中的指针,但在if语句中,chp不会与任何指针进行比较,但是如果执行这个判断,请帮助理解这个程序。
答案 0 :(得分:3)
if (pointer)
相当于if (pointer != NULL)
。
答案 1 :(得分:3)
声明if(chp)
相当于if(chp != NULL)
。根据{{3}},strchr“返回指向C字符串str中第一个字符出现的指针。如果找不到该字符,则该函数返回一个空指针。”所以当找到一个角色时,if(chp)
语句就是真的。
答案 2 :(得分:1)
C中的if
关键字检查其表达式是否不等于0.所以
if (chp)
相当于
if (chp != 0)
一般来说,在C中,NULL
和0
之间存在等价关系,所以
if (chp != NULL)
请注意,if
是以这种方式定义的,因为C没有合适的布尔类型。通常具有适当布尔类型的语言(如 C#和 Java )不允许使用if (chp)
,其中chp
不是布尔类型。 C ++ 是一个例外,由于历史原因(最后它是C的直接后代)就像C. Javascript 更复杂。如果某些内容为if (something)
或(不是 - true
,非空字符串,而非 - 0
而非null
,则undefined
会被“激活”。
答案 3 :(得分:1)
比较指针时,
if(chp)
与
相同if(chp != NULL) // null pointer
或
if(chp != 0) // also null pointer
答案 4 :(得分:1)
你在做什么是检查指针是否不是NULL
指针。回想一下,NULL
是内存地址0,定义为:
( ( void * ) 0 )
...因此以下内容是等效的:
if ( NULL ) <=> if ( false ) <=> if ( 0 )
请注意,C中的任何非零值都被视为true
,只有0是false
。因此,有效内存地址始终为true
。
最后,if ( pointer )
的陈述相当于if ( pointer != NULL )
。