gpt4 book ai didi

c++ - 我在函数中有一个本地 char 数组 - 当我返回数组名称时,为什么返回值为 null?

转载 作者:行者123 更新时间:2023-11-28 04:10:36 24 4
gpt4 key购买 nike

<分区>

我遇到了一个很困惑的事情。我在函数中做了一个局部char数组,返回数组名,但是返回值为null?

char* get_string(){
char local[] ="hello world\n";
cout<<"1"<<(int)local<<endl;//shows a reasonable value
return local;
}

int main(){
char* p = get_string();
cout<<"2"<<(int) p<<endl;//shows 0
return 0;
}

我知道使用局部变量不好,因为当函数返回时,局部变量占用的堆栈部分会被其他函数调用使用,但我认为这应该返回第一个元素的地址数组,不应为空。我很困惑;任何帮助将不胜感激。

我使用 QT 32 版本,编译器是 MSVC2015(我对编译器还处于初级阶段;甚至不确定 MSVC 是编译器名称)。

--已更新,我认为这个问题不是这个 Returning an array using C 的重复我知道在范围外使用原子/本地存储是无效的,我的问题是为什么尽管使用不当,返回值仍变为 0。

--好的,谢谢大家。我想我找到了答案。我看到函数char* get_string()的汇编代码,汇编代码的最后一部分是这样的

0x44bce7  mov $0x0,%eax 
0x44bcec leave
0x44bced ret

我认为这是实现定义的,在编译器中硬编码,如果我返回局部变量的地址,则 %eax%rax 设置为 0 .

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com