返回一个数组vs返回int64_t(C / C ++)

时间:2012-12-25 19:36:08

标签: c arrays

我一次又一次地读到你不能从一个函数(在C / C ++中)返回一个数组,但是如果是这样的话,怎么能从一个函数返回int64_tint64_t只是long int的数组吗?

(是的,我知道你可以返回指向数组开头的指针,但我说的是返回int[4],而不是int*。)

3 个答案:

答案 0 :(得分:1)

  

不是int64_t只是一个long int数组吗?

不,int64_t是标量类型的别名(与数组类型之类的聚合类型相对),通常它是long long类型的别名。

当然,当int64_t定义为精确宽度整数类型在C中是可选的时,这适用。

答案 1 :(得分:0)

您实际上可以返回任何不是数组的类型 - 例如,如果您希望返回四个int值,则可以返回struct my_4ints { int x[4] };

但是int64_t(在32位机器上)是一个'项目'。它碰巧作为两个寄存器值返回,在x86上,通常是eax,edx。但那仍然是一个值。

答案 2 :(得分:0)

如果将数组包装在结构中,则可以从函数返回它。但是要避免这种情况,因为ABI在这些事情上并不完全稳定(例如:使用gcc 3.3编译的对象链接到Solaris上用gcc 3.4编译的对象是不兼容的,在这种情况下可能会崩溃)。