最佳答案
我并不是要重复 C 不能返回数组这个常见问题,而是要更深入地研究它。
我们不能这样做:
char f(void)[8] {
char ret;
// ...fill...
return ret;
}
int main(int argc, char ** argv) {
char obj_a[10];
obj_a = f();
}
但我们可以做到:
struct s { char arr[10]; };
struct s f(void) {
struct s ret;
// ...fill...
return ret;
}
int main(int argc, char ** argv) {
struct s obj_a;
obj_a = f();
}
因此,我略读了由 gcc-S 生成的 ASM 代码,似乎正在处理堆栈,像处理其他 C 函数返回一样处理 -x(%rbp)
。
直接返回数组是怎么回事?我的意思是,不是在优化或计算复杂性方面,而是在没有结构层的情况下实际执行的能力方面。
额外的数据: 我在 x64Intel 上使用 Linux 和 gcc。