如何使用宏函数计算数组的长度?

时间:2012-01-18 19:17:22

标签: java c

在java中是否有可能,如果不是如何在c中计算?

5 个答案:

答案 0 :(得分:3)

如果它真的是数组(不是指针),你可以sizeof(arr)/sizeof(*arr)

答案 1 :(得分:1)

没有办法计算出来。在C(不是C ++,有std::arraystd::vector)中,数组作为其指针传输,您可能会增加一些偏移量。所以你真的不知道“数组”的运行时大小,除了一些约定。

特别是对于正式数组,没有办法知道传递的实际数组的大小 例如除非您提供静态维度,否则为void f(int arr[]) { /*...*/ }

同样,如果外部数组声明为extern int xarr[];,则无法使用sizeof(xarr)/sizeof(xarr[0])获取其维度。

答案 2 :(得分:1)

在Java中,基本数组的长度为array.length,而ArrayList(以及大多数其他集合)的长度为arrayList.size()

在C中,数组的长度为sizeof(array) / sizeof(array[0]),但这几乎无用,因为您无法将数组作为参数传递(它们会退化为指针)。在C中查找数组大小的常规方法是将其作为函数的额外参数传递,或者有时使用sentinel值终止它(例如,字符串\0已终止)

答案 3 :(得分:1)

在C中,如果只有指向它的指针,则无法计算数组的大小。您必须将其存储在单独的变量中。

实际上你必须将数组的大小保存在单独的变量中,因为如果你想使用动态大小的数组,你必须分配内存。

如果您想使用固定大小的数组,那么在编写代码时就知道它的大小,为什么不使用#define,variable或const来存储它?

Java与C语言完全不同,编程哲学也不同 - 你应该始终牢记这一点。

在Java中,您应该使用array.length,例如:http://www.roseindia.net/help/java/a/java-array-length.shtml

答案 4 :(得分:0)

简单地说,如果只接收指针,则不可能。这就是main有一个argc参数的原因。它定义了argv中的条目数。如果你有一个数组“datatype”(实际上与指针相同,但行为取决于上下文),你可以使用

int[] arr = new int[10];
sizeof(arr)/sizeof(int) // or whatever type is contained in ``arr``