【发布时间】:2018-07-23 18:40:37
【问题描述】:
#include <stdio.h>
int main()
{
int i = 10;
int *p = &i;
foo(&p);
printf("%d ", *p);
printf("%d ", *p);
}
void foo(int **const p)
{
int j = 11;
*p = &j;
printf("%d ", **p);
}
上面的code打印:
11 11 Undefined-value
为什么第三次打印未定义的值?
为什么最后不打印11?
【问题讨论】:
-
这是未定义的行为,您只能保证获得前 11 个。其他两个打印语句可以打印任何内容
-
我得到了 11 11 和一个未定义的值
-
有时你会得到 11 11 和一个未定义的值。有时你不会。
-
此链接显示在
main中对printf的第一次调用原则上已经存在问题,并让您尝试答案中提供的修复:taas.trust-in-soft.com/tsnippet/t/c545ff40 -
如果没有其他原因,它是否值得包含在 wiki 中,它只是作为未定义行为危险的非常明显的演示?
标签: c pointers memory-address