【发布时间】:2019-03-19 15:36:28
【问题描述】:
C 指针(总是)是否以有效的地址存储器开头?例如,如果我有以下代码:
int *p;
*p = 5;
printf("%i",*p); //shows 5
为什么这段代码有效?根据书籍(我读过的),他们说指针总是需要一个有效的地址内存并给出以下类似的例子:
int *p;
int v = 5;
p = &v;
printf("%i",*p); //shows 5
【问题讨论】:
-
因为此类代码的行为未定义,所以任何事情都可能发生。包括匹配预期结果的程序输出。
-
“为什么这段代码有效?” - 它没有;您将观察到的行为与定义的行为混淆了。您的代码破坏了后者,因此您最终可能会观察到一些看似有效但没有定义行为的脊椎来确保它会起作用的东西。
-
即使是坏掉的时钟一天也能正确两次。
-
@Lundin 你链接到一个 C++ 标记的问题。我们不希望新手认为 C++ 就是 C,对吗?