如何计算外部阵列的大小?

时间:2016-02-09 14:23:37

标签: c arrays sizeof

有谁知道如何从外部文件计算数组的大小?

考虑:

Data.c
float arr[]={1.4, 2.3, 7.6, 4.8, 3.3};
MAIN.C
#include <stdio.h>

int main()
{
extern float arr[];
//...
}

然后我怎么去那里?我尝试过使用sizeofsize_t,但这两种方法仍有错误。

3 个答案:

答案 0 :(得分:4)

在你的main.c文件中,编译器唯一的信息是extern float arr[];,这不包括大小。

所以你要么尝试在Data.c中定义一个返回sizeof(arr)的函数(在这个编译单元中应该知道大小),或者当你标记问题c ++时,你使用std::array固定大小或std::vector可变大小。

答案 1 :(得分:3)

问题是extern float arr[]不完整类型,它只是说“在其他地方,有一个名为arr的未知大小的数组”。如果已知大小,则只能使用sizeof,例如extern float arr[5]

但是,你不应该写这样的程序。在非常量变量上使用extern总是表明程序设计不好。

相反,您应该使用私有封装,并且所有对变量的访问都应该通过setter / getter函数来完成。同样,您可以创建一个返回数组大小的函数get_size()

答案 2 :(得分:2)

简短的回答是,你不能做你想做的事。当你说

extern float arr[];

编译器根本无法获得该外部数组的大小。

简单的解决方法是使用第二个包含数组大小的全局变量:

Data.c

float arr[]={1.4, 2.3, 7.6, 4.8, 3.3};
int arrsz = sizeof(arr) / sizeof(arr[0]);

MAIN.C

extern float arr[];
extern int arrsz;

要获得额外赠送金额,请使用size_t arrsz代替int

正如其他一些答案所指出的那样,像这样的全球变量风格很差,特别是在&#34;真实&#34;程式。对于一些更高风格,更简单的修复,请参阅其他答案。