如果我在C:
中有这些代码行size_t num = 10;
size_t *pointer = #
以下检查似乎有效,但我想确保我做得对:
if (pointer != NULL)
printf("pointer is not NULL \n");
else
printf("pointer is NULL \n");
答案 0 :(得分:1)
指针是一个变量,指向另一个变量的地址/内存位置。
size_t num = 10;
根据1999 ISO C标准(C99),size_t是至少16位的无符号整数类型。所以 num 变量的值为10.
size_t *pointer = #
一个名为' 指针的指针'声明并指向变量' num '的地址(&符号(&)运算符给出变量的地址/内存位置。)
由于指针指向某个值,因此指针值不为NULL,因此输出将为
pointer is not NULL
要解释一下,
空指针 - 如果指针没有指向任何地方,则称其为空指针
答案 1 :(得分:0)
C FAQ有一个专门针对空指针的部分:http://c-faq.com/null/
这告诉你:
根据语言定义,一个"积分常量表达式,其值为0''在指针上下文中,在编译时将其转换为空指针。也就是说,在一方是指针类型的变量或表达式的初始化,赋值或比较中,编译器可以告诉另一方的常量0请求空指针,并生成正确类型的空指针值。
所以你像这样测试空指针:
if (pointer != 0)
或者更简洁:
if (pointer)
至于NULL
宏,再次引用C FAQ:
预处理器宏NULL(由多个标头,包括
stdio.h
和stddef.h
)定义为空指针常量,通常为0
或((void *)0)
。