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