假设我们有以下函数原型:
void function1(char str[]);
void function2(char *str);
现在说我们有一个字符串char name[] = "John";
,我们希望通过这些函数。两者有什么区别?它们的用途和局限是什么?是否存在一个优先于另一个的情况?如果将字符串初始化为char *name = "John"
?
我理解在函数中使用char str[]
和char *str
之间的区别,但我不知道它们的行为是函数参数或参数。
答案 0 :(得分:4)
没有区别。 在参数列表中,编译器将T[]
和T[n]
形式的参数静默重写为T*
。这意味着您无法按值传递数组。
答案 1 :(得分:4)
之间的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
在发布问题时,搜索论坛一分钟,看看问题是否已经得到解答。问题的第一部分已被多次询问和回答。因为你似乎真的对第二部分感到困惑,我在这里回答了。
答案 2 :(得分:1)
从技术角度来看,没有区别。但是,如果您使用[],那么您正在记录读取您期望数组的代码的人。