📜  什么是指向Null指针的指针

📅  最后修改于: 2021-05-28 04:37:52             🧑  作者: Mango

C中的NULL指针
在非常高的层次上,我们可以将NULL视为空指针,C中出于各种目的使用了NULL指针。 NULL的一些最常见用例是

  1. 当尚未为该指针变量分配任何有效的内存地址时初始化该指针变量。
    int* pInt = NULL;
    
  2. 在访问任何指针变量之前检查空指针。这样,我们可以在与指针相关的代码中执行错误处理,例如,仅当其不为NULL时才取消引用指针变量。
    if (pInt != NULL) /*We could use if(pInt) as well*/
    { /*Some code*/
    }
    else { /*Some code*/
    }
    
  3. 当我们不想传递任何有效的内存地址时,将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基础课程》。