1

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

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

现在假设我们有一个char name[] = "John";希望通过这些函数传递的字符串。两者有什么区别?它们的用途和局限性是什么?在某些情况下,一个人比另一个人更受欢迎吗?如果将字符串初始化为 ,会有所不同char *name = "John"吗?

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

4

3 回答 3

4

C之间绝对没有区别

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

因为char str[]简单地简化为char *当作为参数传递给函数时。并且为了记录,甚至与函数所看到char str[20]完全相同char *str

至于如果将字符串初始化为是否会有所不同

char *name = "John";

是的,确实如此!这里将该字符串John的地址分配给指针namename稍后可以重新分配另一个地址。

char *name="John";
name="Mary";  //Works in C

但在

char name[]="John";

您正在将一个字符数组对象初始化nameJohn。这里的区别是您不能name在初始化后重新分配另一个字符串。以下是 C 中的错误:

char name[]="John";
name="Mary";// Wrong

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

于 2013-04-28T01:36:24.457 回答
4

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

于 2013-04-27T23:52:20.320 回答
1

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

于 2013-04-27T23:52:44.320 回答