函数内部定义字符串数组和指针指向常量字符串的不同(哪位高人解释一下为什么不同),多谢

来源:互联网 发布:产业并购基金 知乎 编辑:程序博客网 时间:2024/04/28 20:39

http://club.topsage.com/thread-443540-1-1.html 


用函数返回值来传递动态内存这种方法虽然好用,但是常常有人把return语句用错了。这里强调不要用return语句返回指向“栈内存”的指针,因为该内存在函数结束时自动消亡,见示例4.4。

  1. char *GetString(void)
  2. {
  3.  char p[] = "hello world";
  4.  return p; // 编译器将提出警告
  5. }
  6. void Test4(void)
  7. {
  8.  char *str = NULL;
  9.  str = GetString(); // str 的内容是垃圾
  10.  cout<< str << endl;
  11. }
复制代码
示例4.4 return语句返回指向“栈内存”的指针

  用调试器逐步跟踪Test4,发现执行str = GetString语句后str不再是NULL指针,但是str的内容不是“hello world”而是垃圾。
如果把示例4.4改写成示例4.5,会怎么样?
  1. char *GetString2(void)
  2. {
  3.  char *p = "hello world";
  4.  return p;
  5. }
  6. void Test5(void)
  7. {
  8.  char *str = NULL;
  9.  str = GetString2();
  10.  cout<< str << endl;
  11. }
复制代码

示例4.5 return语句返回常量字符串

为什么getstring2()中的p在函数外依然指向一个地址,而getstring()中的p却指向垃圾。

0 0
原创粉丝点击