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

假设我们有以下函数原型:

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

现在说我们有一个字符串char name[] = "John"; 我们希望通过这些function。 两者有什么区别? 它们的用途和局限是什么? 是否存在一种优先于另一种情况的情况? 如果将字符串初始化为char *name = "John"它会有所作为吗?

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

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 

在发布问题时,搜索论坛一分钟,看看问题是否已经得到解答。问题的第一部分已被多次询问和回答。因为你似乎对第二部分真的很困惑,我已经回答了在这里。

没有区别。 在参数列表中 ,编译器将T[]T[n]forms的参数静默重写为T* 。 这意味着您无法按值传递数组。

从技术角度来看没有区别。 但是,如果您使用[],那么您正在记录读取您希望数组的代码的人。