[AlehphSoul原创,转载请注明出处]
------------------------------------------------ --------
一直在学java,很久没有碰c了,习惯了声明变量的同时进行初始化(否则java报错),今天在我的ubuntu上装了gcc,想玩玩c,没想到第一个小程序就把我给枪毙了,以下是说明:
function_invoke1.c
#include<stdio.h>
void function(){
int tem;
printf("%d/n", tem);
tem = 12;
}
int main(int argc, char* argv[]){
function();
function();
return (0);
}
执行结果:
134513753
12
===================================================================
function_invoke2.c
#include<stdio.h>
void function(){
int tem;
printf("%d/n", tem);
tem = 12;
}
int main(int argc, char* argv[]){
function();
printf("----------/n");//这里是唯一的不同
function();
return (0);
}
执行结果:
134513817
------
-1215959052
==================================================================
同样是调用两次函数,只是第二个在两次调用之间调用了另一个函数,为什么会出现上述情况呢?我现在还是不是很清除,应该涉及到编译器了,记得有一句话是这样的:
“
局部变量的存储空间在每次函数调用时分配,在函数返回时释放“
而这里两次的不同结果让我有点头晕,我有如下猜测,不知是否正确,,期待大神解释:
"操作系统进程调用一个函数的时候会临时开辟一块内存用于存储函数的局部变量,若连续调用同一个函数,就可能一直使用这一块内存,若中间调用了其他函数,那么下一次再调用这个函数的时候就不会那么巧合的分配同一块内存了"。
上述观点只是猜测,有时间再细细研究了!
PS:由此,我觉得程序员在使用变量或对象的时候一定要养成初始化的习惯,否则这些问题真的很麻烦,调试都是麻烦事!