【问题标题】:What is the difference between char str[] and char *str as function parameters?char str[] 和 char *str 作为函数参数有什么区别?
【发布时间】:2013-04-27 23:48:20
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c arrays string pointers parameters


【解决方案1】:

在C中绝对没有区别

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

因为char str[] 在作为参数传递给函数时简单地简化为char *。并且为了记录,即使char str[20] 完全与函数将其视为@987654325 相同@。

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

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】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 使用[] 记录意图的想法很好。不过,我认为它在实践中的使用并不多。
      猜你喜欢
      • 2018-06-27
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 2020-02-06
      相关资源
      最近更新 更多