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
的区别,但我不知道它们的行为是函数参数还是参数。
有绝对没有之间
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*
。这意味着你不能按值传递数组。
从技术角度来看没有区别。但是,如果您使用[],那么您正在为读取代码的人记录您期望的数组。
使用'[]'来表示文档意图的想法是一个好主意。尽管如此,我并没有在实践中看到它的用处。 – 2013-04-28 00:06:05
如果你不屑四处看看,你肯定会找到答案。这已被问及许多次。 – 2013-04-27 23:51:34
如果您将整个标题复制/粘贴到Google搜索框中(正如我刚才所做的那样),您将获得大量点击。 – 2013-04-27 23:54:57
[函数定义中的指针与数组的区别:void fct1(int \ * p)和void fct1(int p \ [\])之间的区别是什么?](http:// stackoverflow。com/questions/15261509/pointer-vs-array-in-function-definition-what-is-the-difference-between-void-fct) – fredoverflow 2013-04-27 23:57:58