C语言空指针?
空指针是不指向任何内存位置的指针。它存储段的基地址。 null指针基本上存储Null值,而void是指针的类型。
null指针是特殊的保留值,它在 stddef 头文件中定义。在这里,Null表示指针指向第0
个存储位置。
如果我们没有要分配给该指针的任何地址,则已知作为空指针。当将NULL值分配给指针时,它将被视为 Null指针。
Null指针的应用
以下是Null指针的应用:
当指针未指向有效的内存地址时,用于初始化o指针变量。
它用于在取消引用指针之前对指针执行错误处理。
它作为函数参数传递,并且当我们不想传递实际的内存地址时从函数返回。
空指针的示例
int * ptr =(int *)0;
float * ptr =(float *)0;
char * ptr =(字符*)0;
双* ptr =(双*)0;
字符* ptr ='\ 0';
int * ptr = NULL;
让我们看看需要使用空指针的情况。
当我们不为指针变量分配任何内存地址时。
#include <stdio.h>
int main()
{
int *ptr;
printf("Address: %d", ptr); // printing the value of ptr.
printf("Value: %d", *ptr); // dereferencing the illegal pointer
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值分配给指针始终是一种好习惯。