C:函数返回指针

时间:2015-11-18 17:23:26

标签: c function pointers

我在概念问题上遇到困难

考虑这段代码:

char *myfunc()
{
char *temp = "string";
return temp;
}

int main()
{
char* ptr = myfunc();
} 

我无法理解为什么ptr在函数调用后指向“string”。 myfunc()在堆栈中创建一个地址,该地址的值为“string”,另一个地址的地址为“string”。 当函数结束时,它在堆栈中的内存被释放,因此它应该返回一个指向不再包含“string”的地址的指针。

1 个答案:

答案 0 :(得分:6)

temp变量的位置在堆栈上,但字符串文字的位置(temp点)未存储在堆栈中。所有字符串文字都具有程序完整运行时的生命周期,因此指向字符串文字的指针可以自由传递。

但是你应该养成在指向字符串文字时使用const char *的习惯,因为字符串文字无法修改。

来自ISO / IEC 9899:2011,§6.4.5/ 6:

  

然后使用多字节字符序列初始化静态存储持续时间

的数组

(强调我的)

当规范说“静态存储持续时间”时,它意味着生命周期与程序的执行相同。