一个很简单但又很奇异的C现象

[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:由此,我觉得程序员在使用变量或对象的时候一定要养成初始化的习惯,否则这些问题真的很麻烦,调试都是麻烦事!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值