zoukankan      html  css  js  c++  java
  • 变量地址生命周期的一个问题

    面试时经常会考到这样一道改错题:
    
    #include <stdio.h> 
     
    int* function(int parameter) 
    {
    int a = parameter;
    a += 1;
    printf("在fuction函数中,变量a的值是%d,  变量a的地址是%d
    ", a, &a);
    return &a; 
    } 
     
    int main() 
    {
    int parameter = 10; 
            int *p = function(parameter); 
    printf("指针p的值是%d, p指向的值是%d
    ", p, *p); 
        
    return 0; 
    } 

    程序原意是在main函数中定义一个变量 parameter,将其传递到函数function中,将parameter赋值给变量a,将a的地址返回给main函数,在main函数再通过a的地址来访问a的值。先来看程序的运行结果:



    从运行结果看出,变量a在function函数中的值是11,且地址是1244900。在main函数中,a的地址还是1244900,但是值却是4198508!
    本道题错在没有正确理解变量的生命周期。 在function函数执行完后,变量a的生命周期也随之结束,即系统会回收a的存储区域,因此这块存储区域存什么,那是系统的事情,我们就不得而知了。有关变量的作用域的详细情况,一般的教材都会讲到,读者可以参考相关教材。



  • 相关阅读:
    杜教筛学习笔记
    AtCoder Beginner Contest 188 F
    求和公式
    洛谷P4848 崂山白花蛇草水 权值线段树+KDtree
    二次剩余学习笔记
    Miller Rabin素数检测与Pollard Rho算法
    半平面交学习笔记
    凸包习题总结
    多项式半家桶
    CF997解题报告
  • 原文地址:https://www.cnblogs.com/itblog/p/7236580.html
Copyright © 2011-2022 走看看