1

I have the following program

#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();
}

i know chp is pointer in this program , but in the if statement , the chp is not compared to any pointer , but how this if statment is executed , please help to understand this program.

4

5 回答 5

3

if (pointer)相当于if (pointer != NULL)

于 2013-08-11T14:49:57.913 回答
3

该语句if(chp)等价于if(chp != NULL)。根据此文档,strchr“返回指向 C 字符串 str 中第一次出现的字符的指针。如果未找到该字符,则该函数返回一个空指针。” 因此,当找到一个字符时,该语句if(chp)为真。

于 2013-08-11T14:51:09.140 回答
1

C中的if关键字检查其表达式是否不等于0。所以

if (chp)

相当于

if (chp != 0)

NULL并且通常在 C 中和之间存在等价性0,所以

if (chp != NULL)

请注意,if以这种方式定义的,是因为 C 没有正确的布尔类型。通常具有适当布尔类型的语言(如C#Java )不允许使用if (chp)where chpis not boolean 类型。C++是一个例外,由于历史原因(最终它是 C 的直接后代)就像C。Javascript更复杂。if (something)如果某物是true或(非- 0,非空字符串,非-null和非undefined),则被“激活”。

于 2013-08-11T14:50:37.600 回答
1

比较指针时,

if(chp)

是相同的

if(chp != NULL) // null pointer

或者

if(chp != 0)   // also null pointer
于 2013-08-11T14:50:44.610 回答
1

你在做什么是检查指针是否不是NULL指针。回想一下NULL内存地址 0,定义为:

( ( void * ) 0 )

...因此以下是等效的:

if ( NULL ) <=> if ( false ) <=> if ( 0 )

请注意,考虑 C 中的任何非零值true,只有 0 是false。因此,有效的内存地址将始终为true.

最终, 的陈述if ( pointer )等价于if ( pointer != NULL )

于 2013-08-11T14:51:44.090 回答