zoukankan      html  css  js  c++  java
  • 返回局部变量或临时变量的地址的问题

    各位大神,请帮忙分析一下下面的代码:

    ;

    int* func(void) {
    int a[5] = {1,2,3,4,5};
    printf("%p %d ",a,*a);
    printf("%p %d ",a+1,*(a+1));
    printf("%p %d ",a+2,*(a+2));
    printf("%p %d ",a+3,*(a+3));
    printf("%p %d ",a+4,*(a+4));
    return a;
    }
    int main() {
    int a[5];
    int *p = a;
    p = func();
    printf(" ");
    printf("%p %d ",p,*p);
    printf("%p %d ",p+1,*(p+1));
    printf("%p %d ",p+2,*(p+2));
    printf("%p %d ",p+3,*(p+3));
    printf("%p %d ",p+4,*(p+4));
    return 0;
    }

    请问:为什么函数func返回局部数组a,然后赋值给main函数中的int *p,其内存地址都相应的传过来了,但是main函数中用int *p执行输出的时候,只有p[0]的值是对的,其余都是随机值??

    注:我用的是win7系统下的visual studio2010得出的结果,且studio2010中会有如下的提示:

    1>e:2010-project123123123.cpp(16): warning C4172: 返回局部变量或临时变量的地址

  • 相关阅读:
    关于DRY原则
    类型之惑
    ThoughtWorks测试
    编程非易事
    瀑布与迭代的真实区别
    对TDD原则的理解
    自我练习
    C# CreateProcess的测试
    乱侃OOD
    复杂系统的五个属性
  • 原文地址:https://www.cnblogs.com/qiangupc/p/3149955.html
Copyright © 2011-2022 走看看