什么 ! (char *)表示在C中

时间:2015-07-31 03:48:26

标签: c pointers char

我正在看一个例子,我看到了这个:

char *str;

/* ... */

if (!str || !*str) {
    return str;
}

这是否意味着它是空的还是什么?

4 个答案:

答案 0 :(得分:6)

str是一个char指针。 !否定它。基本上,!strstr == NULL将评估为真(1)。

第二部分是,(如果str指向某事)评估为true(1)如果第一个字符是空字符('\0') - 意味着它是一个空字符串。

注意:
*str取消引用指针并检索第一个字符。这与执行str[0]相同。

答案 1 :(得分:4)

!str表示没有分配给str的内存。 !*str表示str指向空字符串。

答案 2 :(得分:2)

在询问之前,你可以做一些小测试。

#include <stdio.h>

int main()
{
    char *str = "test";
    printf("%d\n",*str);
    printf("%c\n",*str); // str[0]
    printf("%d\n",str);
    if (!str || !*str)
    {
        printf("%s",str);
    }

    return 0;
}

!的含义是否定。除0以外,if条件的每个值均为真。此处,str*str返回的值不是0。所以,你可以做出推断。

答案 3 :(得分:0)

如果str设置为!str,则第一个表达式NULL计算为true;如果设置为的其他任何内容,则为false,无论指向的内存是否仍然分配 。如果将str设置为不再有效的内存,则可能导致未定义的行为。

如果!*str中的地址处的值为str(空字符),则第二个表达式\0的计算结果为true,但如果!str计算为{true},则根本不进行评估由于布尔OR运算符的短路动作。