NULL 指针的特定值
Specific Value to a NULL Pointer
我指的是 What's the difference between a null pointer and a void pointer? 中的 NULL 指针
根据@AnT的post回复,"Formally, each specific pointer type (int *, char * etc.) has its own dedicated null-pointer value"
我写了一个简单的程序。但是指针值不是固定的整数或字符。它有时会改变。那么我们如何得出指向 int 的 NULL 指针具有固定值的结论呢?指针的值也永远不会为 0.
#include <stdio.h>
int main()
{
int a;
char *ptr; // Declaring a pointer without initializing it
int *ptrToInt;
if(ptr)
{
printf("Pointer is not NULL\n");
printf("Value of pointer = %x\n",ptr);
printf("Value of pointer = %x\n",ptrToInt);
}
else
{
printf("Pointer is NULL\n");
printf("Value of pointer = %x",ptr);
printf("Value of pointer = %x\n",ptrToInt);
}
return 0;
}
NULL
是一个值,表示任何类型的指针都是无效的,void*
是一个类型。在 C 或 C++ 中,常量 0 可以分配给任何类型的指针,并将其设置为该类型的空指针。常量 NULL
可能被声明为 0
、((void*)0)
或在不寻常的系统上的其他内容。
NULL
指针是任何类型的指针,它被设置为无效值 NULL
。您必须自己将其设置为该值;简单地留下一个没有初始化器的指针意味着它可能包含垃圾。 (技术上有一些例外,但总是初始化你的变量。)
A void*
是一种类型,可以存储任何其他类型的指针(指向函数的指针除外)。它不能被取消引用,你不能像数组一样索引它或对它进行指针运算。它通常用作语法糖,让您可以调用诸如 memset()
之类的函数,该函数仅将您提供给它的地址视为要填充的字节数组,或分配 p = malloc(…)
,而无需显式强制转换。换句话说,当你只是把指针当作一个无类型的内存块,稍后会变成某种类型的对象,但你不关心是哪种类型。
如果你想测试不同类型的空指针的位值,我建议强制转换为 uintptr_t
和 <inttypes.h>
中的 printf()
格式说明符。在大多数但不是所有的实现中,这些都将为零。
我指的是 What's the difference between a null pointer and a void pointer? 中的 NULL 指针 根据@AnT的post回复,"Formally, each specific pointer type (int *, char * etc.) has its own dedicated null-pointer value"
我写了一个简单的程序。但是指针值不是固定的整数或字符。它有时会改变。那么我们如何得出指向 int 的 NULL 指针具有固定值的结论呢?指针的值也永远不会为 0.
#include <stdio.h>
int main()
{
int a;
char *ptr; // Declaring a pointer without initializing it
int *ptrToInt;
if(ptr)
{
printf("Pointer is not NULL\n");
printf("Value of pointer = %x\n",ptr);
printf("Value of pointer = %x\n",ptrToInt);
}
else
{
printf("Pointer is NULL\n");
printf("Value of pointer = %x",ptr);
printf("Value of pointer = %x\n",ptrToInt);
}
return 0;
}
NULL
是一个值,表示任何类型的指针都是无效的,void*
是一个类型。在 C 或 C++ 中,常量 0 可以分配给任何类型的指针,并将其设置为该类型的空指针。常量 NULL
可能被声明为 0
、((void*)0)
或在不寻常的系统上的其他内容。
NULL
指针是任何类型的指针,它被设置为无效值 NULL
。您必须自己将其设置为该值;简单地留下一个没有初始化器的指针意味着它可能包含垃圾。 (技术上有一些例外,但总是初始化你的变量。)
A void*
是一种类型,可以存储任何其他类型的指针(指向函数的指针除外)。它不能被取消引用,你不能像数组一样索引它或对它进行指针运算。它通常用作语法糖,让您可以调用诸如 memset()
之类的函数,该函数仅将您提供给它的地址视为要填充的字节数组,或分配 p = malloc(…)
,而无需显式强制转换。换句话说,当你只是把指针当作一个无类型的内存块,稍后会变成某种类型的对象,但你不关心是哪种类型。
如果你想测试不同类型的空指针的位值,我建议强制转换为 uintptr_t
和 <inttypes.h>
中的 printf()
格式说明符。在大多数但不是所有的实现中,这些都将为零。