如何更改传递给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
是一个数组,你有: char *str = "Hello";
,并想修改str
指向的位置 ,然后你将传递一个char**
:
bar(&str); ... void bar(char **ptr_string) { *ptr_string = "Bye"; }
str
现在将指向 "Bye"
。