sus*_*sdu 1 c pointers function
我在概念问题上有困难
考虑这段代码:
char *myfunc()
{
char *temp = "string";
return temp;
}
int main()
{
char* ptr = myfunc();
}
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么ptr在函数调用后指向"string".myfunc()在堆栈中创建一个地址,该地址的值为"string",另一个地址的地址为"string".当函数结束时,它在堆栈中的内存被释放,因此它应该返回一个指向不再包含"string"的地址的指针.
temp变量的位置在堆栈上,但字符串文字(到哪些temp点)的位置不存储在堆栈中.所有字符串文字都具有程序完整运行时的生命周期,因此指向字符串文字的指针可以自由传递.
但是你应该养成const char *在指向字符串文字时使用的习惯,因为字符串文字无法修改.
来自ISO/IEC 9899:2011,§6.4.5/ 6:
然后使用多字节字符序列初始化静态存储持续时间的数组
(强调我的)
当规范说"静态存储持续时间"时,它意味着生命周期与程序的执行相同.
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |