有人知道为什么我的程序在下面的情况下打印-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被放置在堆栈的特定位置,并且该位置在调用之间不会改变。所以你看到的是之前的值。
如果你在这两者之间打电话,你会得到不同的结果。

关于c - 我可以重新初始化全局变量以覆盖其在C中的值吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22728876/

10-11 22:06