c - 如何更改作为参数传递的变量的值?

标签 c parameter-passing

如何更改 C 中作为参数传递的变量的值? 我试过这个:

void foo(char *foo, int baa){
    if(baa) {
        foo = "ab";
    } else {
        foo = "cb";
    }
}

并调用:

char *x = "baa";
foo(x, 1);
printf("%s\n", x);

但它打印baa为什么? 提前致谢。

最佳答案

您想要更改 char* 指向的位置,因此您需要在 foo() 中接受一个参数,还有一个间接级别;一个 char** (指向 char 指针的指针)。

因此 foo() 将被重写为:

void foo(char **foo /* changed */, int baa)
{
   if(baa) 
   {
      *foo = "ab"; /* changed */
   }
   else 
   {
      *foo = "cb"; /* changed */
   }
}

现在,当调用 foo() 时,您将使用地址运算符 (& ):

foo(&x, 1);

错误代码段打印 baa 的原因是因为您只是为 local 变量 char *foo 分配了一个新值,这与x无关。因此,x 的值永远不会被修改。

关于c - 如何更改作为参数传递的变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49126991/

相关文章:

c - 在C中查找int类型的长度

C - 使用位移运算符进行基本转换

java - Struts 2 中静态包含页面的参数传递

c# - 如何使用参数数量未知的操作

javascript - Reactjs app div onclick 在 IE 11 中不起作用,没有调用任何函数

c - 获取C/C++指令的地址

c++ - const int *p 与 int const *p - 类型后的 const 是否可以接受?

c# - 延迟实例化的传递参数

c - 你如何传递一个字符数组

c - 套接字连接失败,telnet OK