gpt4 book ai didi

c - 如何在将 char* 传递给 C 中的函数后指向预期的 char 数组?

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

为什么我改不了char*指向的内容?
例如:

int main(int argc, char * argv[]) {
char *a = NULL; // now a = NULL
b(a);
// but now a points to NULL again! Why?
}

void b(char *argv[], char* c) {
// now a is passed in
c = *argv[3];
// now a actually points to the start of char array pointed to by argv[3]
}

从输出中,我看到 *a 已传递给函数。然后在函数 b 内部,它实际上指向了预期的 char[ ]。但是从b返回时,a又变成了NULL。为什么?从b返回后a如何指向预期的内容?谢谢!

最佳答案

C 按值传递所有内容,包括指针。函数参数类似于从调用者处获取初始值的局部变量。一旦进入函数内部,就可以自由更改参数的值,而不会影响调用者传递的值。

C 将可修改内容传递给函数的方式是传递指针。如果你想修改某种类型的值T,你传递一个指向T的指针;如果要修改指向T 的指针,则必须传递指向T 的指针,依此类推。换句话说,间接级别必须比被更改的值高一级。

这如何适用于您的情况?您的函数 b 需要修改一个指向 char 的指针,因此它需要一个指向 char 的指针,如下所示:

void b(char *argv[], char **ppc) {
...
}

在函数内部,您通过取消引用一次ppc 来修改ppc 指向的指针:

*ppc = argv[3]; // No asterisk here in front of `argv`

当然从main调用b需要获取a的地址,像这样:

b(argv, &a);

关于c - 如何在将 char* 传递给 C 中的函数后指向预期的 char 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19062143/

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