gpt4 book ai didi

C 文字,这些存储在哪里

转载 作者:太空狗 更新时间:2023-10-29 16:01:06 27 4
gpt4 key购买 nike

考虑以下代码:

#include <stdio.h>

void f(const char * str) {
str = "java";
}

void main (int argc, char * argv[]) {
const char *str = "erlang";
f(str);
printf("%s\n", str);
}

输出是“erlang”,我不太清楚为什么……我目前的知识表明,字符串文字“erlang”和“java”都存储在“常量”部分的进程地址空间中。根据这个,函数 f 应该将指针更改为指向“java”,但这并没有发生。有人可以解释一下这里发生了什么吗?

最佳答案

因为函数参数在 C 中是按值传递,并且在被调用方修改参数不会影响调用方的局部变量。

使用指针修改调用者的局部变量。

#include <stdio.h>

void f(const char ** str) { /* add * to declare pointer */
*str = "java"; /* add * to access what is pointed */
}

int main (int argc, char * argv[]) { /* use standard signature */
const char *str = "erlang";
f(&str); /* add & to get a pointer pointing at str */
printf("%s\n", str);
}

关于C 文字,这些存储在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36057690/

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