[英]What is the difference between char str[] and char *str as function parameters?
假設我們有以下函數原型:
void function1(char str[]);
void function2(char *str);
現在說我們有一個字符串char name[] = "John";
我們希望通過這些功能。 兩者有什么區別? 它們的用途和局限性是什么? 在某些情況下,有一個優先於另一個的情況嗎? 如果將字符串初始化為char *name = "John"
會有所不同嗎?
我了解在函數中使用char str[]
和char *str
之間的區別,但是我不知道它們作為函數參數或參數的行為。
沒有區別。 在參數列表中 ,編譯器將形式為T[]
和T[n]
的參數靜默重寫為T*
。 這意味着您不能按值傳遞數組。
兩者之間的C 絕對沒有區別
void function1(char str[]);
void function2(char *str);
因為當將char str[]
作為參數傳遞給函數時, char str[]
簡化為char *
。就記錄而言,即使char str[20]
與函數將其視為char *str
也是完全一樣的。
至於將字符串初始化為是否會有所不同
char *name = "John";
是的,確實如此!這里將字符串John
地址分配給指針name
,以后可以將另一個地址重新分配給name
。
char *name="John";
name="Mary"; //Works in C
但在
char name[]="John";
您正在將一個字符數組對象name
初始化為John
。不同之處在於,初始化后您不能再將另一個字符串重新分配給name
在C中,以下錯誤:
char name[]="John";
name="Mary";// Wrong
在發布問題時,在論壇上搜索一分鍾以查看問題是否已經回答。問題的第一部分已被多次詢問並很好地回答。由於您似乎對第二部分確實感到困惑,所以我已經回答了在這里。
從技術角度來看沒有什么區別。 但是,如果您使用[],那么您正在編寫文檔的人希望獲得數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.