相关疑难解决方法(0)

返回数组的不可能性在C中实际意味着什么?

我并不想复制关于C不能返回数组的常见问题,而是要深入研究它.

我们不能这样做:

char f(void)[8] {
    char ret;
    // ...fill...
    return ret;
}

int main(int argc, char ** argv) {
    char obj_a[10];
    obj_a = f();
}
Run Code Online (Sandbox Code Playgroud)

但我们可以这样做:

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();
}
Run Code Online (Sandbox Code Playgroud)

所以,我正在浏览由gcc -S生成的ASM代码,并且似乎正在使用堆栈,-x(%rbp)与任何其他C函数返回一样进行寻址.

直接返回数组有什么用?我的意思是,不是在优化或计算复杂性方面,而是在没有结构层的情况下这样做的实际能力方面.

额外数据:我在x64 Intel上使用Linux和gcc.

c

71
推荐指数
3
解决办法
6460
查看次数

标签 统计

c ×1