2013-04-27 163 views
0

假設我們有以下的函數原型:char str []和char * str作爲函數參數有什麼區別?

void function1(char str[]); 
void function2(char *str); 

現在說我們有一個字符串char name[] = "John";我們希望通過這些功能。兩者有什麼區別?他們的用途和限制是什麼?有沒有比其他人更喜歡的情況?如果字符串初始化爲char *name = "John",它會有所作爲嗎?

我理解在函數內使用char str[]char *str的區別,但我不知道它們的行爲是函數參數還是參數。

+0

如果你不屑四處看看,你肯定會找到答案。這已被問及許多次。 – 2013-04-27 23:51:34

+0

如果您將整個標題複製/粘貼到Google搜索框中(正如我剛纔所做的那樣),您將獲得大量點擊。 – 2013-04-27 23:54:57

+1

[函數定義中的指針與數組的區別:void fct1(int \ * p)和void fct1(int p \ [\])之間的區別是什麼?](http:// stackoverflow。com/questions/15261509/pointer-vs-array-in-function-definition-what-is-the-difference-between-void-fct) – fredoverflow 2013-04-27 23:57:58

回答

4

絕對沒有之間

void function1(char str[]); 
void function2(char *str); 

因爲char str[]只是減少了char *時作爲參數傳遞給function.And備案用C差異,甚至char str[20]正是同樣的事情,該功能將其視爲char *str

至於它是否會有所作爲,如果在字符串爲

char *name = "John"; 

初始化是的,它!該字符串John的下面地址已經被分配到指針name,而另一個地址可以被reaassigned到之後的name

char *name="John"; 
name="Mary"; //Works in C 

char name[]="John"; 

要初始化到John一個字符數組對象name這裏,差異的是,你不能initialization.The以下後重新分配另一個字符串name是錯誤的C:

​​

在發佈問題時,搜索論壇一分鐘,看看問題是否已經是已答覆。您的問題的第一部分已多次提出並得到了很好的回答。由於您對第二部分看起來真的很困惑,因此我在這裏回答了這個問題。

4

沒有區別。 在參數列表中,編譯器將T[]T[n]的參數靜默地重寫爲T*。這意味着你不能按值傳遞數組。

1

從技術角度來看沒有區別。但是,如果您使用[],那麼您正在爲讀取代碼的人記錄您期望的數組。

+0

使用'[]'來表示文檔意圖的想法是一個好主意。儘管如此,我並沒有在實踐中看到它的用處。 – 2013-04-28 00:06:05

相關問題