【发布时间】:2012-02-25 03:11:14
【问题描述】:
我正在玩指针以了解它们,所以我想知道为什么我不能打印地址 0(零)的 值 和其他.
#include <stdio.h>
int main()
{
int *i = 0;
int *e = (int*)0x100;
while (i <= e)
{
printf("%d\n", *i);
i++;
}
return 0;
}
这个例子崩溃了。
【问题讨论】:
-
我建议你尝试用事物的地址初始化指针(例如
int *x=&y),而不是给它们分配整数值。将整数转换为指针并不是使用指针的方式。 -
尝试取消引用 0 地址在任何情况下都是无效的,甚至没有触及访问可能未分配给您的进程的随机内存地址的问题。
-
您可能想知道这是针对哪个系统的。您的代码在某些系统中非常好,但在其他系统(Windows 等)中不起作用。
-
@ugoren 这取决于代码用于哪个系统。这段代码在某些系统上可能非常好。
-
@Lundin “一元 * 运算符取消引用指针的无效值包括空指针”(6.5.3.2 中的脚注 102)。该代码会引发未定义的行为,在任何系统上都不好。