gpt4 book ai didi

c - 堆上的字符串指针与被调用函数的堆栈

转载 作者:太空宇宙 更新时间:2023-11-04 06:45:43 25 4
gpt4 key购买 nike

我编写了以下基本 C 程序来打印字符串并学习了一些关于内存的知识:

#include <stdio.h>

char * get_string() {
char * s = "OK";
return s;
}

int main(void) {
char * string = get_string();
printf("String: %s\n", string);
return 0;
}

这有效并打印:

String: OK

我的问题是为什么这行得通?例如,在get_string() 中,变量s 不是存储到堆栈而不是堆,为什么该变量在传递时不“消失”回到主要功能?如果不在被调用函数 get_string() 中调用 malloc 怎么能完成这样的事情?

最佳答案

不,它存储在全局数据部分。

如果您将该行替换为:

char s[] = "OK";

然后您的程序将无法运行。

具体来说,这个字符串存储在程序文件的数据中,函数实际上返回一个指向该数据存储位置的指针。

关于c - 堆上的字符串指针与被调用函数的堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58252212/

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