我正在学习C,并尝试编写一个函数,给定一个整数数组,返回数组的长度。这是我的代码:
#include <stdio.h>
int length_of_array(int array[])
{
int length = 0;
int i = 0;
while (array[i] != '\0') {
length += 1;
i += 1;
}
return length;
}
int main()
{
int test_array[] = {1, 2, 3, 4, 5};
printf("%d\n", length_of_array(test_array));
return 0;
}
然而,当我编译这段代码并运行它时,我说传入的数组的长度是14.有谁知道这里可能出现什么问题?
答案 0 :(得分:3)
C中的字符串是NUL终止的。数组不是(除非你自己明确地做)。数组的大小就是数组的大小:如果分配为常量,则可以使用sizeof
运算符找出大小。如果你拥有的只是一个普通的指针,你需要记住它的大小 - 一旦忘记它,C就无法获得它。
#include <stdio.h>
int main() {
int test_array[] = {1, 2, 3, 4, 5};
int *test_ptr = test_array;
printf("%lu\n", sizeof(test_array) / sizeof(*test_array)); // correct
printf("%lu\n", sizeof(test_ptr) / sizeof(*test_ptr)); // incorrect
return 0;
}