gpt4 book ai didi

c - 为什么 C 数组在传递大小时衰减为指针

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

我理解为什么数组在传递给函数而不指定其大小时衰减为指针,例如:

void test(int array[]);

为什么在传递尺寸时会这样做?例如。

void test(int array[3]);

我在使用后一个函数签名下的 sizeof 时遇到了麻烦,这令人沮丧,因为数组长度在编译时是明确已知的。

最佳答案

void test(int* array);
void test(int array[]);
void test(int array[3]);

所有这些变体都是相同的。 C 只允许您使用替代拼写,但即使最后一个用数组大小​​显式注释的变体也会衰减为指向第一个元素的指针。

也就是说,即使使用最后一个实现,您也可以使用任意大小的数组调用该函数:

void test(char str[10]) { }

test("test"); // Works.
test("let's try something longer"); // Still works.

没有神奇的解决方案,处理该问题的最易读的方法是使用数组 + 大小创建一个 struct,或者简单地将大小作为附加参数传递给函数。

LE:请注意,此转换仅适用于数组的第一个维度。传递给函数时,int[3][3] 会转换为 int (*)[3],而不是 int **.

关于c - 为什么 C 数组在传递大小时衰减为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46628989/

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