C中的NULL指针
在非常高的层次上,我们可以将NULL视为空指针,C中出于各种目的使用了NULL指针。 NULL的一些最常见用例是
- 当尚未为该指针变量分配任何有效的内存地址时初始化该指针变量。
int* pInt = NULL;
- 在访问任何指针变量之前检查空指针。这样,我们可以在与指针相关的代码中执行错误处理,例如,仅当其不为NULL时才取消引用指针变量。
if (pInt != NULL) /*We could use if(pInt) as well*/ { /*Some code*/ } else { /*Some code*/ }
- 当我们不想传递任何有效的内存地址时,将null指针传递给函数参数。
int fun(int* ptr) { /*Fun specific stuff is done with ptr here*/ return 10; } fun(NULL);
指向空指针的指针
由于Null指针始终指向null,因此人们会认为指向Null指针的指针是无效的,不会被编译器编译。但事实并非如此。
考虑以下示例:
#include
int main()
{
// Null pointer
char* np = NULL;
// Pointer to null pointer
char** pnp = &np;
if (*pnp == NULL) {
printf("Pointer to a null pointer is valid\n");
}
else {
printf("Pointer to a null pointer is invalid\n");
}
return 0;
}
该程序不仅可以编译,而且可以成功执行以将输出显示为
输出:
Pointer to a null pointer is valid
解释:
这里发生的是,毫无疑问,当创建一个Null指针时,它指向null。但是Null指针变量占用一些内存。因此,当创建指向空指针的指针时,它指向实际的存储空间,而该存储空间又指向空。
因此,指向空指针的指针不仅有效,而且是重要的概念。
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。