gpt4 book ai didi

c - 为什么我必须通过引用传递字符串才能更改它指向的位置?

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

我正在使用一个非常简单的程序来熟悉 C 字符串和指针。

此版本通过引用传递字符串,有效:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void test(char **string) {

*string = (char *)malloc(5);
char *temp = "hell";
strcpy(*string, temp);
}

int main(int argc, char *argv[]) {

char *string = NULL;
test(&string);
printf("%s\n", string);
return 0;
}

它打印“ hell ”。

此版本只是按值传递字符串,无法正常工作,并导致 SEGFAULT:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void test(char *string) {

string = (char *)malloc(5);
char *temp = "hell";
strcpy(string, temp);
}

int main(int argc, char *argv[]) {

char *string = NULL;
test(string);
printf("%s\n", string);
return 0;
}

据我所知,第一个版本是有意义的,因为我传入了字符串地址的地址。因此,当我取消引用这个双指针时,我得到了字符串的真实地址并可以使用 malloc 重新分配它。

然而,第二个版本我不太清楚为什么它不起作用。在这个版本中,我将字符串的地址传递给测试函数。我读到 C 中的所有内容都是按值传递的,但数组名称实际上是地址。这是否意味着我正在将字符串的实际地址传递给测试?事情不应该一样吗?我很困惑,请帮帮我。

最佳答案

记住这一点:在 C 编程中要使用值,您需要“按值”传递。要更改值,您必须“按地址”传递。所以,如果你想改变的是一个地址,那么你需要传递它的地址来改变它。否则你只能使用它。

关于c - 为什么我必须通过引用传递字符串才能更改它指向的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32816792/

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