我的阵列有多大?

时间:2011-09-07 15:34:10

标签: c arrays

所以,鉴于以下内容:

#include <stdio.h>
int * getarr();
int main(int argc, char* argv)
{
    int * arr = getarr();
    printf("%d", sizeof(arr));
}

int* getarr()
{
    static int a[4] = {0,1,0,3};
    return a;
}

如何找到arr的长度? arr[4] == 0,但arr[0]arr[2]也一样。

如果这是char*,则答案为iterate until '\0',但这似乎不适用于'\0' == 0

寻址arr[5]似乎始终导致值&gt; 16 3 - 1(我系统中int的大小),但这似乎不是一个可靠的衡量标准,因为它只会让我觉得只是内存中的一个空位。

有没有办法一致地检索这个值?或者它只是必须传递?

5 个答案:

答案 0 :(得分:4)

当您在main()函数中时,无法检索数组的长度。 int[4]转换为int *

返回的getarr()后,此信息已丢失

答案 1 :(得分:3)

您必须自己跟踪阵列的大小。语言中没有任何内容可以帮助您。遗憾。

这是人们使用包含更强大数据结构的更高级别语言的原因之一,例如std::vector<T>

答案 2 :(得分:2)

除了用它明确地传递大小外,你找不到该数组的长度。

答案 3 :(得分:1)

C数组只是内存中的字节串...它们不像Pascal字符串或其他类似“数组”的数据结构,如Java,Python等具有运行时边界检查的语言,因此使用实际的数组数据来耦合有关数组大小的信息。因此,您将不得不传递数组的大小,以便知道它的大小,除非它是静态分配的,或者在本地堆栈帧上,此时您可以使用sizeof(array)

答案 4 :(得分:0)

在C.中无法知道.C数组只是指向内存的指针,因此它与底层指针类型具有相同的大小。

因此,您必须将长度存储在其他地方,例如在一个常数