簡體   English   中英

char str []和char * str作為函數參數有什么區別?

[英]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.

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