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

时间:2013-04-27 23:48:21

标签: c arrays string pointers parameters

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

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

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

,是否会产生影响?

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

3 个答案:

答案 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)

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