有人知道为什么我的程序在以下情况下会打印-69吗?我希望它能以C语言打印未初始化的原始数据类型的默认值/垃圾值。谢谢。
#include<stdio.h>
int a = 0; //global I get it
void doesSomething(){
int a ; //I override global declaration to test.
printf("I am int a : %d\n", a); //but I am aware this is not.
a = -69; //why the function call on 2nd time prints -69?
}
int main(){
a = 99; //I re-assign a from 0 -> 99
doesSomething(); // I expect it to print random value of int a
doesSomething(); // expect it to print random value, but prints -69 , why??
int uninitialized_variable;
printf("The uninitialized integer value is %d\n", uninitialized_variable);
}
您所拥有的是未定义行为,您无法预先预测未定义行为的行为。
但是,这种情况很容易理解。函数中的局部变量a
位于doesSomething
堆栈上的特定位置,并且该位置在两次调用之间不会改变。因此,您所看到的是先前的值。
如果您在两者之间打电话给其他人,您会得到不同的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句