簡體   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