【发布时间】:2015-03-16 22:59:46
【问题描述】:
我想知道为什么不能在 C 中返回数组?
毕竟,数组只是一个由大小信息支持的指针(使sizeof 工作)。首先,我认为这样做是为了防止我返回堆栈上定义的数组,但没有什么能阻止我返回指向堆栈上某些内容的指针(gcc 警告我,但代码编译)。而且我还可以返回字符串文字,它是静态存储的字符数组。顺便说一句,在 lunux 中,它存储在 .rodata 中,并且 const 数组也存储在那里(使用 objdump 检查),所以我可以返回数组(将其转换为指针)并且它可以工作,但是 AFAIK 这只是特定于实现(另一个操作系统/编译器可能将 const 存储在堆栈上)。
我有两个想法如何实现数组返回:只需将其复制为值(就像对结构所做的那样。我什至可以返回将数组包装成结构的数组!!),并自动创建指向它的指针或允许用户返回const 数组并创建这样的数组应该具有静态存储持续时间的合同(就像对字符串所做的那样)。这两个想法都是微不足道的! 所以,我的问题是为什么 K&R 没有实现这样的东西?
【问题讨论】:
-
当然,技术上可以像其他内置函数一样使数组可复制和可分配,但令人讨厌的是它们不是。我经常这样问自己。
-
@Prof.Falken 如果我理解正确,OP 会问为什么会这样。设计决策有原因的情况并不少见。
-
@Mr.F 是的,这绝对不是重复的。
-
@SamProtsenko Jeez。不能返回
int吗?还是包含数组的struct?这是一个设计决策。没有技术原因无法完成。 -
@SamProtsenko 在 C 标准中,没有提到 stack 来传递和返回函数参数和返回。 (不过,大多数实现确实使用堆栈)