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

Why use a Pointer and its dereference in if statement in c++

本文关键字:指针 引用 取消 c++ 语句 if 为什么      更新时间:2023-10-16

我正在寻找一些 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, "nr");
    if (a_pszBreak && *a_pszBreak)
    {
        *a_pszBreak = 0;
        a_pszBreak++;
        LogPollData((const char *)a_pszDataItem);
    }
    a_pszDataItem = a_pszBreak;
} while (a_pszBreak && *a_pszBreak);

这意味着指针应该指向某物,此外,某物必须与 0 不同。

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

if (a_pszBreak && *a_pszBreak)

在C++中,任何可以解释为 0 的东西都是假的,而其他任何东西都被认为是真的。

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

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

因此,在简单的英语中,此if -语句检查指针是否不是nullptr以及指针是否不指向空字符串。

In if (a_pszBreak && *a_pszBreak) a_pszBreak 用于检查a_pszBreak是否指向有效的内存区域,即a_pszBreak不是 NULL,*a_pszBreak用于检查a_pszBreak指向的内存是否不以 NULL 字符(即 )开头。

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