这个问题只是为了让我更好地理解C++中的静态变量.
我认为如果它被声明为静态,我可以在C++中返回对局部变量的引用,因为变量应该在函数返回后生效.为什么这不起作用?
#include <stdio.h>
char* illegal()
{
  char * word = "hello" ;
  return word ;
}
char* alsoNotLegal()
{
  static char * word = "why am I not legal?" ;
  return word ;
}
int main()
{
  // I know this is illegal
  //char * ill = illegal();
  //ill[ 0 ] = '5' ;
  //puts( ill ) ;
  // but why is this? I thought the static variable should "live on" forever -
  char * leg = alsoNotLegal() ;
  leg[ 0 ] = '5' ;
  puts( leg ) ;
}
Joh*_*itb 20
这两个功能本身并不违法.首先,在这两种情况下,您都会返回指针的副本,该指针指向具有静态存储持续时间的对象:字符串文字将在整个程序持续时间内生效.
但是你的main功能完全是关于未定义的行为.你不能写入字符串文字的内存:)你的主要功能可以减少到相同的行为
"hello"[0] = '5';
"why am I not legal?"[0] = '5';
两者都是未定义的行为,并且在某些平台上崩溃(好!).
编辑:请注意,字符串字面量在C一个const类型++(不是那么C): char const[N].对指向非const字符的指针的赋值会触发不推荐的转换(无论如何,一个好的实现都会警告).因为上面对const数组的写法不会触发转换,所以代码会误编译.真的,你的代码正在这样做
((char*)"hello")[0] = '5';
((char*)"why am I not legal?")[0] = '5';