请考虑以下
代码:
char* pointerTesting(void) {
char* test = "hello";
return test;
}
int main() {
char* string = pointerTesting();
printf("string: %s\n",string);
}
编译和运行没有问题.但是,根据我的理解,这应该不起作用,因为分配给测试指针的内存在堆栈上,并且在返回main时它被销毁.
所以问题是,如果在pointerTesting()函数中没有malloc,它如何工作?
在这种情况下,字符串“hello”存储在全局存储器*中.所以它已经分配了.
因此,从函数返回时它仍然有效.
但是,如果你这样做:
char test[] = "hello";
return test;
然后不,它不会工作. (未定义的行为)在这种情况下,字符串实际上是一个本地数组 – 当函数返回时它不再存在.
*虽然通常就是这种情况,但标准并没有说它必须存储在全局内存中.但重要的是,字符串文字的生命周期是整个程序的持续时间. (看评论)