[英]C: function returning pointer
我在概念上有困难
考虑以下代码:
char *myfunc()
{
char *temp = "string";
return temp;
}
int main()
{
char* ptr = myfunc();
}
我不明白为什么在函数调用后ptr指向“字符串”。 myfunc()在堆栈中创建一个值为“ string”的地址,并为另一个地址为“ string”的地址。 函数结束时,将释放其在堆栈中的内存,因此它应返回一个指针,该指针指向不再包含“字符串”的地址。
temp
变量的位置在堆栈上,但是字符串文字( temp
指向的位置)的位置未存储在堆栈上。 所有字符串文字都有程序整个运行时的生命周期,因此可以自由传递指向字符串文字的指针。
但是,在指向字符串文字时,您应该真正养成使用const char *
的习惯,因为无法修改字符串文字。
根据ISO / IEC 9899:2011第6.4.5 / 6条:
然后,将多字节字符序列用于初始化静态存储持续时间数组
(强调我的)
当规范说“静态存储持续时间”时,表示生存期与程序的执行时间相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.