Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回数组与返回int64(C/C+;+;)_C_Arrays - Fatal编程技术网

返回数组与返回int64(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中,整数类型是可选的。您实际上可以返回任何不是数组的类型-例如,如果您希

我一次又一次地读到,不能从函数返回数组(在C/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函数和宏来访问,这些函数和宏隐藏了细节。