美文网首页
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++面试中的 变量生存期

    下边代码会出现什么错误 char p[]= "hello world"相当于char p[12],strcpy(p...

  • 成员变量和局部变量

    java中的局部变量和成员变量: 在java中,局部变量的作用域在当前大括号以内的,局部变量的生存期也是在当前大括...

  • C++中的成员变量和成员函数

    C++中的类有两个成分: (1)成员变量 成员变量按照作用域分为静态成员变量和非静态成员变量,C++中成员变量的默...

  • C++ 变量和复合类型

    前面说了C++的基本数据类型,下面来看看在C++中如何定义变量和常量。 变量 定义和初始化 C++定义变量的方式和...

  • C++中基类的析构函数为什么要用virtual虚析构函数?

    析构函数是对象生存期终结时调用的特殊成员函数。析构函数的目的是释放对象可能在它的生存期间获得的资源。 C++中基类...

  • C语言学习08.作用域和生存期

    变量的作用域(scope):变量起作用或有效的代码范围,空间。变量的生存期(life time):变量存在的时间范...

  • c++ python java

    c++ 初始化 C++类中成员变量的初始化有两种方式 - yu132563的专栏 - CSDN博客 C++ 变量初...

  • C++ 中的变量

    C++ 中的变量内存数据类型 C++ 数据类型 使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的...

  • C语言中auto,register,static,const,v

    (1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变...

  • C语言中 auto,register,static,const,

    1. auto 这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变...

网友评论

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

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