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

时间:2011-12-17 09:26:28

标签: c pointers

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

char str[] = "This is a string";

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

4 个答案:

答案 0 :(得分:2)

我认为你的意思是这样的:

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);

答案 1 :(得分:0)

您可以通过char*。将复制指针 ,但它仍将指向相同的字符串

如果您需要传递指针本身(而不是其副本),您应该传递char**

答案 2 :(得分:0)

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

void lower_first_char(char *str)
{
    *str = tolower(*str);
}

执行此函数后,传递的字符串的第一个字符将更改为小写。

答案 3 :(得分:0)

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

foo(str);
...
void foo(char *some_string) {
   some_string[0] = 'A';
}

str现在暂停 "Ahis is a string"


如果您不是str是一个数组,而是char *str = "Hello";,并希望修改str 指向的位置,那么您将传递char**

bar(&str);
...
void bar(char **ptr_string) {
   *ptr_string = "Bye";
}

str现在指向"Bye"