如何更改在C中传递给函数的实际参数?

如何更改在C中传递给函数的实际参数?,c,pointers,C,Pointers,我想更改传递给函数的实际参数,而不是它的副本。例如: char str[] = "This is a string"; void lower_first_char(char *str) { *str = tolower(*str); } 我想在调用后创建一个str值不同的函数。我试图创建一个接受char**作为参数的函数,但我无法得到我想要的。我想你的意思是这样的: void update_string(char ** ptr) { *ptr = strdup("This i

我想更改传递给函数的实际参数,而不是它的副本。例如:

char str[] = "This is a string";
void lower_first_char(char *str)
{
    *str = tolower(*str);
}

我想在调用后创建一个str值不同的函数。我试图创建一个接受char**作为参数的函数,但我无法得到我想要的。

我想你的意思是这样的:

void update_string(char ** ptr)
{
    *ptr = strdup("This is a test");
    return;
}
char * str = strdup("hello world\n");
printf("%s\n", str);
update_string(&str);
printf("%s\n", str);
然后像这样调用函数:

void update_string(char ** ptr)
{
    *ptr = strdup("This is a test");
    return;
}
char * str = strdup("hello world\n");
printf("%s\n", str);
update_string(&str);
printf("%s\n", str);
您可以传递char*。指针将被复制,但仍将指向同一字符串


如果需要传递指针本身而不是其副本,则应传递一个char**

若要更改传递给函数的字符串,请使用常规指针。例如:

char str[] = "This is a string";
void lower_first_char(char *str)
{
    *str = tolower(*str);
}
执行此函数后,传递字符串的第一个字符将更改为小写。

如果要修改实际字符串,请传递字符*:

foo(str);
...
void foo(char *some_string) {
   some_string[0] = 'A';
}
str现在将保存Ahis是一个字符串

如果str不是数组,而是:char*str=Hello;,如果要修改str指向的位置,则需要传递一个char**:


str现在将指向Bye。

向我们展示您的尝试将帮助您获得更好的答案。