char str[]和char*str作为函数参数有什么区别?

char str[]和char*str作为函数参数有什么区别?,c,arrays,string,pointers,parameters,C,Arrays,String,Pointers,Parameters,假设我们有以下功能原型: void function1(char str[]); void function2(char *str); 现在假设我们有一个字符串charname[]=“John”我们希望传递这些函数。这两者的区别是什么?它们的用途和局限性是什么?是否存在一种情况优于另一种情况?如果字符串被初始化为char*name=“John”,会有什么不同吗 我理解在函数中使用char str[]和char*str之间的区别,但我不知道它们作为函数参数或参数的行为。没有区别在参数列表中,T[

假设我们有以下功能原型:

void function1(char str[]);
void function2(char *str);
现在假设我们有一个字符串
charname[]=“John”我们希望传递这些函数。这两者的区别是什么?它们的用途和局限性是什么?是否存在一种情况优于另一种情况?如果字符串被初始化为
char*name=“John”
,会有什么不同吗


我理解在函数中使用
char str[]
char*str
之间的区别,但我不知道它们作为函数参数或参数的行为。

没有区别在参数列表中,
T[]
T[n]
格式的参数由编译器以
T*
的形式重新写入。这意味着不能按值传递数组。

没有区别在参数列表中,
T[]
T[n]
格式的参数由编译器以
T*
的形式重新写入。这意味着您不能按值传递数组。

从技术角度看没有区别。但是,如果您使用[],那么您就是在为阅读您的代码的人编写文档,您希望看到一个数组。

从技术角度看,这没有什么区别。但是,如果您使用[],那么您是在为阅读您的代码的人编写文档,您希望得到一个数组。

在C语言中,这两种语言之间绝对没有区别

void function1(char str[]);
void function2(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

在发布问题的同时,在论坛上搜索一分钟,看看问题是否已经得到了回答。你问题的第一部分已经被问了很多次,并且回答得非常好。因为你似乎对第二部分感到困惑,所以我在这里回答了这个问题。

在C和

void function1(char str[]);
void function2(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

在发布问题的同时,在论坛上搜索一分钟,看看问题是否已经得到了回答。你问题的第一部分已经被问了很多次,而且回答得很好。因为你似乎真的对第二部分感到困惑,所以我在这里回答了这个问题。

如果你费心四处看看,你肯定会找到答案的。这个问题已经被问了很多次,也被回答了很多次。如果你把你的整个标题复制/粘贴到谷歌搜索框中(就像我刚才笑的那样),你会得到很多点击率。如果你费心四处看看,你肯定会找到答案。这已经被问过很多次了。如果你把你的整个标题复制/粘贴到谷歌搜索框中(就像我刚才笑的那样),你会得到大量的点击率。你的答案可能会重复在这里使用
[]
来记录意图是一个好主意。不过,我不认为它在实践中有太多的用途。使用
[]
来记录意图是一个好主意。但我不认为它在实践中有多大用处。