C编程中strchr中指针的用法

时间:2013-08-11 14:47:00

标签: c

我有以下程序

#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不会与任何指针进行比较,但是如果执行这个判断,请帮助理解这个程序。

5 个答案:

答案 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中,NULL0之间存在等价关系,所以

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 )