美文网首页
C++面试中的 变量生存期

C++面试中的 变量生存期

作者: 乔大叶_803e | 来源:发表于2020-01-09 16:57 被阅读0次

    下边代码会出现什么错误

    char *GetMemory(void)
    {
      char p[] = "hello world"
      return p;
    }
    
    void Test(void)
    {
      char *str = NULL;
      str = GetMemory();
      printf(str)
    }
    

    char p[]= "hello world"
    相当于char p[12],
    strcpy(p,"hello world") p是一个数组名,属于局部变量,存储在栈中,“hello world”存储在文字存储区,数组p中存储的是"hello world"的一个副本,当函数结束后,p就被收回,副本也消失了(确切的说p指向的栈存储区被取消标记,可能随时被系统修改)而函数返回的p指向的内容也变的不确定,文字存储区的"hello world"未改变 ,可以这样修改:

    char* p = "hello world";
    return p
    

    这里p直接指向文字存储区的"hello world"
    函数按值返回p存储的地址,所以有效

    static char p[]= "hello world"l
    return p;
    

    static 指出数组p为静态数组,函数结束也不会释放,所以有效。

    相关文章

      网友评论

          本文标题:C++面试中的 变量生存期

          本文链接:https://www.haomeiwen.com/subject/qnnyactx.html