为什么在c ++中的if语句中使用指针及其解引用

时间:2016-07-11 13:01:09

标签: c++ pointers

我正在寻找一些c ++代码,并被if(ptr && *ptr)搞糊涂了,在这种情况下它做了什么?

// Process the data here.  We just break the data into separate pieces and 
// display it for the sake of simplicity.
char * a_pszBreak = NULL;
char * a_pszDataItem = (char*)s_aucDataBuffer;
do
{
    // The poll data is terminated by either a Carriage Return alone, or a
    // Carriage Return/Line Feed pair.
    a_pszBreak = strpbrk(a_pszDataItem, "\n\r");
    if (a_pszBreak && *a_pszBreak)
    {
        *a_pszBreak = 0;
        a_pszBreak++;
        LogPollData((const char *)a_pszDataItem);
    }
    a_pszDataItem = a_pszBreak;
} while (a_pszBreak && *a_pszBreak);

3 个答案:

答案 0 :(得分:6)

这意味着指针应指向某个东西,此外某些东西必须与0不同。

就像(a_pszBreak != nullptr && a_pszBrealk[0] != '\0')

答案 1 :(得分:0)

if (a_pszBreak && *a_pszBreak)

在C ++中,任何可以解释为0的内容都是false,而其他任何内容都被认为是出于语句的目的。

因此,这确保指针不是 NULL ,并且指针指向的第一个元素的内容也不是 null 或0。

由于短路,如果指针 NULL ,则不会检查第二部分。

所以用简单的英语,这个if - 语句检查指针是不是nullptr ,如果指针没有指向空字符串。

答案 2 :(得分:0)

if (a_pszBreak && *a_pszBreak) a_pszBreak中用于检查a_pszBreak是否指向有效内存区域,即a_pszBreak不是NULL,*a_pszBreak用于检查是否有内存由a_pszBreak指出并不以NULL字符开头,即\0

简而言之,if (a_pszBreak && *a_pszBreak)用于检查a_pszBreak是否指向长度至少为1的字符串。