【发布时间】:2018-01-27 07:49:29
【问题描述】:
我在 C 标准中找不到,如果未初始化的指针评估为真、假,或者导致未定义或实现定义的行为?例如:
{
int *p;
if (p)
do_sth();
}
【问题讨论】:
-
当然是 UB。
-
上下文很重要!如果指针是在函数内部定义的(因为下一条语句似乎是
if测试它),结果是未定义的行为。如果指针在任何函数之外定义,则默认初始化为空指针并比较为假。 -
如果它在函数中并且已经获取了它的地址,它可能驻留在内存中并且它的内容是不确定的,并且值可以在任何使用实例中改变,但它的行为就像它是真的一样或在任何给定时刻为假。
-
有人可以指出 C 标准中的具体部分吗?我找不到它。不,这不是一个重复的问题。
标签: c pointers initialization undefined-behavior