统一指针可以是 NULL 指针吗?

问题描述 投票:0回答:1

从我读到的内容来看,空指针指向内存位置“0”,而未初始化的指针指向随机位置?难道这个随机位置有时是“0”,所以它也是一个NULL指针?我意识到这种情况不会一直发生,但是它会发生吗?或者C 有什么机制可以阻止它发生吗?

c pointers null initialization
1个回答
1
投票

统一化指针可以是 NULL 指针吗?

未初始化的指针可能是空指针。

(不要对空指针使用“NULL”。

NULL
是标准C头文件定义的特定宏,具有一些不同的含义。)

从我读到的内容来看,一个 NULL 指针指向内存位置“0”…

许多 C 实现使用内存地址零作为空指针,但这不是唯一的可能性。 C 标准仅需要一个空指针来与 C 程序中的任何对象或函数进行不相等比较。

…并且统一的指针指向随机位置?

不,“随机”是一个不同的概念。说某件事是随机的就是断言它缺乏模式或可预测性。虽然未初始化对象随机行为不会违反 C 标准,但 C 标准并没有说它这样做,并且未初始化对象实际上不太可能随机行为,而不是至少具有某种由以下行为引起的行为模式:编程环境,尽管不是由 C 标准控制的模式。

未初始化的对象被称为具有“不确定”值。不确定值不是任何特定值,而是对象行为方式的描述。实际上,这意味着 C 标准不要求对象具有确定的值,换句话说,该值不是固定的;它在不同时间可能会有所不同,并且不需要 C 实现从任何特定位置获取值,包括为对象保留的内存。 这意味着,在优化期间,编译器可以从内存、处理器寄存器或其他任何地方获取对象的值,并且它可能在不同时间使用不同的源,并且程序或环境的其他方面可能会发生变化程序使用该值的任何来源。所以程序中对象的值可能会出现变化。

例如,如果

a

是未初始化的

int
,则
printf("%d\n", a); printf("%d\n", a);
可以打印两个不同的数字。

会不会这个随机位置有时是“0”,所以它也是一个NULL指针?

用于不确定指针的值可能是空指针。

© www.soinside.com 2019 - 2024. All rights reserved.