[英]Passing string as an argument in C
我有一個功能:
int getparam(char *gotstring)
我正在傳遞一個字符串參數,如char *sendstring = "benjamin"
而不是我可以使用的上述聲明,
int getparam(char gotstring[])
問題:哪一個更好? 如果我必須使用int getparam(char gotstring[])
那么我必須對現有函數做出的所有其他更改是什么?
int getparam(char gotstring[])
和int getparam(char* gotstring)
是相同的。 就個人而言,我會推薦后一種語法,因為它更好地描述了實際發生的事情。 getparam
函數只有一個指向字符串的指針 ; 它不了解實際的數組大小。 但是,這只是我的意見; 要么會奏效。
在這種情況下,它們意味着相同的事情,您不需要更改函數的其余部分。 但請注意,通常,數組和指針是不同的東西。
兩者都不是更好,真的。 這是你更舒服的東西。 在慣用法中,更常見的是使用char * arg而不是char arg [](想想strcmp,strcpy等)。
接受字符串參數的最佳方法是
int getparam(const char *gotstring);
然后,您可以使用文字字符串調用它:
int main(void)
{
int x = getparam("is this a parameter string?");
return 0;
}
或者一個字符數組:
int main(void)
{
char arg[] = "this might be a parameter string";
int x = getparam(arg);
return 0;
}
在參數指針上使用const
指示調用者該參數在函數內是只讀的,這是非常好的信息。
因為數組是通過C中的引用發送的
int getparam(char *gotstring)
和
int getparam(char gotstring[])
意思是一樣的。 但首先使用的是更多。 所以使用它會讓你成為一名優秀的C公民。
這稱為通過引用傳遞以及名稱如何表示它僅表示傳遞變量的引用 (在本例中為char*
)。
兩種解決方案都可以正常工作,實際發生的是,當void functionName(char* string)
,內存中第一個char
的地址將保存在堆棧中並作為參數傳遞給函數。
因此,對函數內部變量的任何編輯都將編輯原始變量。 在這種情況下,由於您需要傳遞一個數組,您只需擁有此選項。
對於像int
, float
這樣的標准類型,你可以區分它們:
void passByValue(int i);
void passByReference(int &i);
區別在於前者在調用函數時將值復制到堆棧中,而在后者中只傳遞值的引用(指針)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.