gpt4 book ai didi

c - C中局部变量的自动初始化

转载 作者:行者123 更新时间:2023-11-30 20:03:08 25 4
gpt4 key购买 nike

问题:局部变量被初始化为零,但如果将该变量分配给指针,它不会被初始化为零。

代码 1:局部变量被初始化为零(我已经测试过多次,a 总是被设置为零)

int main() {
int a;
printf ("a = %d\n",a);
return 0;
}

OUTPUT:
a = 0 ( I have called this about a 100 times, and 'a' is always zero)

代码 2:局部变量未初始化为零(我已经测试过多次,a 从未设置为零)

int main() {
int a;
printf ("a = %d\n",a);
nt *b = &a;
printf("*b = %d\n",*b);
return 0;
}

OUTPUT:
a = 21683 (everytime I run, I get different values as expected)
*b = 21683

我希望 a 具有随机值,因为它不是静态变量。谁能知道为什么会发生这种情况?这是标准中的内容还是编译器的某些功能。

PS:我使用的是 gcc。

我尝试了不同的优化选项,甚至-o0,但结果是相同的。

最佳答案

这种行为是完全不可预测的。在这种情况下,零和其他任何东西一样都是垃圾。顺便说一句,我碰巧得到了不同的结果:

$ cat a.c
#include <stdio.h>

void f1() {
int a;
printf ("f1: a = %d\n",a);
}

void f2() {
int a;
printf ("f2: a = %d\n",a);
int *b = &a;
printf("f2: *b = %d\n",*b);
}

int main()
{
f1();
f2();
}

$ gcc a.c -O2 -o a
$ ./a
f1: a = 0
f2: a = 0
f2: *b = 0

$ gcc a.c -o a
$ ./a
f1: a = 22011
f2: a = 22011
f2: *b = 22011

关于c - C中局部变量的自动初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54060312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com