【发布时间】:2011-07-18 15:28:51
【问题描述】:
谁能给我解释一下
main()
{
int *x,y;
*x = 1;
y = *x;
printf("%d",y);
}
当我在 gcc 中编译它时,如何在 main 函数中运行它是可以的,而在不同的函数中运行它不会像下面的函数那样工作?
test()
{
int *x,y;
*x = 1;
y = *x;
printf("%d",y);
}
【问题讨论】:
-
您正在取消引用空指针。奇怪的东西比比皆是!
-
不一定是空指针;一个包含未知垃圾的指针,这更糟。
-
是的,我正在取消引用一个空指针,但它怎么会在函数 main 中工作??
-
因为指针的值不同,你正在粉碎、破坏、覆盖别的东西。它也可能在 main 而不是函数中崩溃。您正在取消引用一个未初始化的指针,FWIW 您可能会让飞猴飞出您的鼻子或开始 WW 3。这是“未定义的行为”。
-
是的,取消引用空指针是正确的,但是你怎么会有奇怪的行为,在主函数中它会工作,但在不同的函数中它不会?