gpt4 book ai didi

c - 在函数参数列表中声明 char 指针和 char 数组有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 00:43:55 24 4
gpt4 key购买 nike

有什么区别

foo(char* grid){}

foo(char grid[]){}

我有一个程序,我测试了两种类型的函数参数。它似乎有效,但为什么有效?有什么不同?哪个效率更高,第一个是按引用传递?

最佳答案

在函数参数的情况下(在这种情况下),它们的意思是一样的。

请注意,C99 删除了“隐式 int”规则,因此您的示例应该类似于:

void foo(char* grid){}

void foo(char grid[]){}

定义为数组类型的参数被“调整”为指针类型的参数,指向数组的元素类型。

引用:N1570 6.7.6.3 第 7 段。(这是 2011 ISO C 标准的免费草案,PDF,1.7 MB。)

(在所有其他上下文中,指针声明和数组声明是不同的。请参阅 comp.lang.c FAQ 的第 6 节。

C 中的所有参数都是按值传递的,而不是按引用传递的。在这种情况下,传递的值恰好是一个指针值,它是 char 对象的地址。例如,如果您这样写:

char arr[10];
func(arr);

然后传递的值是 &arr[0](有一个单独的语言规则说数组表达式在大多数但不是所有上下文中被转换/调整为指针表达式)。请注意,没有传递有关数组长度的信息;如果你想跟踪它,你必须明确地这样做。

C 没有传递引用作为语言特性。传递指针值是一种模拟按引用传递的方法。

关于c - 在函数参数列表中声明 char 指针和 char 数组有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52600016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com