c局部变量赋值

来源:百度知道 编辑:UC知道 时间:2024/05/16 05:31:45
int im()
{ int i;
static int j;
printf("i = %d\n", i);
printf("j = %d\n", j);
}
会打印出i=68840,j=0
用static标记的整型变量无论是局部还是全局变量,都会默认赋值为0?
局部变量i未赋初值,那打印出的值是系统给的?为什么多次编译和执行,i的值都是这个,不会变呢?谢谢!

首先,如果你不进行默认赋值的话,你所能取到的值是系统为其分配内存的时候这个内存中的信息所代表的值。这个值是什么都是不确定的。
一般情况下,如果你只运行固定这几个程序的话,取到的值就一直是那个位置的值。如果你关闭这个程序之后去执行了一个游戏等等内存占用较大的,或者重启了一下电脑,可能看到的情况就不一样了。

i没有赋值,里面是内存原来的值,不是随机值
和运行时内存的环境有关
静态变量默认赋值为0

如果没有static,那么i 的值是一个系统给的非0的极大的数值,没有任何意义,但是并不是随机值。

只要是static 声明的变量,如果没有赋初值,那么系统确定地自动赋值为0

之所以多次编译和执行,i的值都是这个,不会变,是因为在你给的代码中,没有给i赋值的操作

如果不加初始值,静态变量会自动初始化为0

我不知道你用的是什么编译器,我用的是VC6.0,我只能说VC里面是怎么做的。
在静态变量被分配在堆里,堆在建立之初是全部用0初始化过的。
局部变量被分配在栈里,栈是用0xCC初始化的。所以那个所谓的很大的负数就是0xCCCCCCCC。这么做的理由记不大清了,好像是说CC在汇编里是单步调试什么的,遇到这个程序就中断了,如果程序跑飞了,那遇到CC就会停下来。