簡體   English   中英

在C中將字符串作為參數傳遞

[英]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的地址將保存在堆棧中並作為參數傳遞給函數。

因此,對函數內部變量的任何編輯都將編輯原始變量。 在這種情況下,由於您需要傳遞一個數組,您只需擁有此選項。

對於像intfloat這樣的標准類型,你可以區分它們:

void passByValue(int i);
void passByReference(int &i);

區別在於前者在調用函數時將值復制到堆棧中,而在后者中只傳遞值的引用(指針)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM