int main()
{
int *i,*j;
printf("%u",i);
}
上述程序将导致输出为0
int main()
{
int *i,*j;
j=i;
printf("%u",i);
}
但是
上述程序将导致非零。为什么呢?
答案 0 :(得分:5)
两个指针都没有初始化,因此它们的初始值是不确定的。访问未初始化的指针是未定义的行为。
此外,使用p
转换说明符来打印指针值(并且还需要强制转换),因为u
需要unsigned int
参数:
printf("%p\n", (void *) i);
答案 1 :(得分:1)
尝试将指针指定给实际的整数存储位置,然后打印地址的值和指向的数据。
main() {
int q = 0, *p = &q;
printf("%p %d", p, *p);
}
答案 2 :(得分:0)
指针的格式说明符是%p
。使用另一个说明符会导致未定义的行为;输出是否为0
是未定义的。
有关格式说明符的完整列表,请单击here。