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

问题描述:

假设我们有以下的函数原型: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:// *。com/questions/15261509/pointer-vs-array-in-function-definition-what-is-the-difference-between-void-fct) – fredoverflow 2013-04-27 23:57:58

绝对没有之间

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:

​​

在发布问题时,搜索论坛一分钟,看看问题是否已经是已答复。您的问题的第一部分已多次提出并得到了很好的回答。由于您对第二部分看起来真的很困惑,因此我在这里回答了这个问题。

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

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

+0

使用'[]'来表示文档意图的想法是一个好主意。尽管如此,我并没有在实践中看到它的用处。 – 2013-04-28 00:06:05