繁体   English   中英

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

[英]How to change the actual argument passed to a function in C?

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

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

我想在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);

您可以传递char* 指针被复制,但仍将指向相同的字符串

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

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

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

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

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

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

str现在将显示 "Ahis is a string"


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

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

str现在将指向 "Bye"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM