C语言 - 空指针

C语言 - 空指针 首页 / C语言入门教程 / C语言 - 空指针

空指针是不指向任何内存位置的指针。它存储段的基地址。 null指针基本上存储Null值,而void是指针的类型。

空指针是在 stddef 头文件中定义的特殊保留值。在这里,Null表示指针指向第0 th 个存储位置。

如果我们没有任何要分配给指针的地址,则称为空指针。如果将NULL值分配给指针,则将其视为 Null指针

空指针应用

以下是Null指针的应用:

  • 当指针未指向有效的内存地址时,用于初始化o指针变量。
  • 它用于在取消引用指针之前对指针执行错误处理。
  • 它作为函数参数传递,并在我们不想传递实际的内存地址时从函数返回。
int * ptr =(int *)0; 
float * ptr =(float *)0; 
char * ptr =(char *)0; 
double * ptr =(double *)0; 
char * ptr ='\0'; 
int * ptr = NULL;

让我们看看需要使用空指针的情况。

  • 当我们不为指针变量分配任何内存地址时。
#include <stdio.h>
int main()
{
   int *ptr;
   printf("Address: %d", ptr);//打印ptr的值。
   printf("Value: %d", *ptr);//取消引用非法指针
   return 0;
}

在上面的代码中,我们声明了指针变量* ptr,但是它不包含任何变量的地址。未初始化的指针变量的取消引用将显示编译时错误,因为它没有指向任何变量。根据堆栈存储器的概念,函数的局部变量存储在堆栈中,如果该变量不包含任何值,则显示为垃圾值。上面的程序显示了一些不可预测的结果,并导致程序崩溃。

如何避免上述情况?

我们可以通过使用Null指针来避免上述情况。空指针是指向第0 存储位置的指针,该位置是保留的内存,无法取消引用。

#include <stdio.h>
int main()
{
    int *ptr=NULL;
    if(ptr!=NULL)
    {
        printf("value of ptr is : %d",*ptr);
    }
    else
    {
        printf("Invalid pointer");
    }
  return 0;
}

在上面的代码中,我们创建了一个指针 * ptr ,并为该指针分配了一个 NULL 值,这意味着它没有指向任何变量。创建指针变量后,我们添加条件以检查指针的值是否为null。

  • 当我们使用malloc()函数时。
#include <stdio.h>
int main()
{
    int *ptr;
    ptr=(int*)malloc(4*sizeof(int));
    if(ptr==NULL)
    {
        printf("Memory is not allocated");
    }
    else
    {
        printf("Memory is allocated");
    }
    return 0;
}

在上面的代码中,我们使用了库函数,即 malloc()。众所周知,malloc()函数分配内存;如果malloc()函数无法分配内存,则它将返回 NULL 指针。因此,有必要添加条件以检查指针的值是否为null,如果指针的值不为null则表示已分配内存

Null Pointer in C

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

如何设计一个秒杀系统 -〔许令波〕

如何做好一场技术演讲 -〔极客时间〕

Spring Boot与Kubernetes云原生微服务实践 -〔杨波〕

Serverless入门课 -〔蒲松洋(秦粤)〕

Linux内核技术实战课 -〔邵亚方〕

说透区块链 -〔自游〕

Web漏洞挖掘实战 -〔王昊天〕

超级访谈:对话毕玄 -〔毕玄〕

结构思考力 · 透过结构看表达 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)