数组的长度

时间:2015-10-05 10:32:10

标签: c arrays

我需要找到数组的长度,如何在不使用sizeof函数的情况下执行此操作。

例如,如果

Array 1 = [0 1 2 3 4 5 6]

此数组的大小为7

2 个答案:

答案 0 :(得分:5)

如果您不能使用int arr[] = {0, 1, 2, 3, 4, 5, 6, -1}; int count = 0; while (arr[count] != -1) count++; (请告诉我们原因),您可以使用循环和标记(-1或某些不能在数组中使用的数字):

{{1}}

答案 1 :(得分:2)

许多高级编程语言一旦创建就保存了数组的长度。

/* e.g. Java */
int[] foo = new int[10];
assert(foo.length == 10);

但是数组的长度不会保存在C中!这很有用,因为您可以决定如何根据优化来保存长度。你基本上有三种获取/保存长度的可能性:

用一定的值标记数组的结尾(即\ 0用于字​​符串)

char foo[] = "bar";
/* foo has length 4(sic!) as '\0' is automatically added to the end*/
int i = 0;
while(foo[i] != '\0'){
    printf("%c",foo[i]);
    i++;
}

将数组的长度保存在变量

int foo[] = {1,2,3,4};
int length = 4;    
for(int i = 0; i < length;i++){
    printf("%i, ",foo[i]);
}

使用sizeof(警告:sizeof(大部分)在编译时计算并且它的使用受到限制。你只能在创建数组的函数中使用sizeof。当你将数组传递给函数时,你只传递了指向第一个元素的指针。因此你可以循环遍历这个数组,因为你知道必须使用什么偏移量(它的元素的类型),但你不知道它有多大,除非你也传递了长度或添加了一个sentinel值) / p>

/* ok */
int foo[] = {1,2,3,4};
for(int i = 0; i < sizeof(foo)/sizeof(int);i++){
    printf("%i, ",foo[i]);
}

/* not ok */
void foo(int bar[]);
void foo(int bar[]){
    for(int i = 0; i < sizeof(bar)/sizeof(int);i++){
        printf("%i, ",bar[i]);
    }
}
int main()
{
    int arr[] = {1,2,3,4};
    foo(arr);
    return 0;
}