返回数组与返回int64(C/C+;+;)
我一次又一次地读到,不能从函数返回数组(在C/C++中),但如果是这样,如何从函数返回返回数组与返回int64(C/C+;+;),c,arrays,C,Arrays,我一次又一次地读到,不能从函数返回数组(在C/C++中),但如果是这样,如何从函数返回int64\t?int64\t不就是一个长int数组吗 (是的,我知道可以返回指向数组开头的指针,但我说的是返回int[4],而不是int*) int64\u不只是一个长int数组吗 否,int64\t是标量类型的别名(与数组类型等聚合类型相反),通常是long类型的别名 当然,当int64\t被定义为精确宽度整数类型时,这一点也适用。在C中,整数类型是可选的。您实际上可以返回任何不是数组的类型-例如,如果您希
int64\t
?int64\t
不就是一个长int数组吗
(是的,我知道可以返回指向数组开头的指针,但我说的是返回int[4]
,而不是int*
)
int64\u不只是一个长int数组吗
否,int64\t
是标量类型的别名(与数组类型等聚合类型相反),通常是long
类型的别名
当然,当
int64\t
被定义为精确宽度整数类型时,这一点也适用。在C中,整数类型是可选的。您实际上可以返回任何不是数组的类型-例如,如果您希望返回四个int值,您可以返回一个struct my\u 4ints{int x[4]}代码>
但int64_t(在32位机器上)是一个“项目”。它恰好作为两个寄存器值返回,在x86上,通常是eax、edx。但这仍然返回一个值 如果将数组包装在结构中,则可以从函数返回它。但这是要避免的,因为ABI在这类事情上不是完全稳定的(例如:在Solaris上使用gcc 3.3编译的对象与使用gcc 3.4编译的对象链接不兼容,在这种情况下可能会崩溃)。C/C++语言中没有类型int64\t
standards@icepack在C中有,在stdint.h中有;固定宽度类型是可选的,但是在CHAR\u BIT==9
@icepack,yes,第7.18节整数类型的实现中,您找不到int64\u t
。请参阅第254页。@DigitalRoss如果您没有提到任何标准版本,人们会认为您正在谈论的是当前版本,即C11,但您的章节号是C99。@ouah,您愿意。如果您不提及该版本,仍有人认为您指的是C89。即使它是一个数组,它也会被包装在一个结构中,这使得它可以复制。@Barmar但在这一点上,您必须像结构成员一样使用
操作符访问它。True。我想到的是像与select()
一起使用的fd\u集
这样的ADT,它们只能使用API函数和宏来访问,这些函数和宏隐藏了细节。