我需要找到数组的长度,如何在不使用sizeof
函数的情况下执行此操作。
例如,如果
Array 1 = [0 1 2 3 4 5 6]
此数组的大小为7
。
答案 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;
}