0%

C 获取数组长度

写了一段求和代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main() {
int Sum(int array[], int n);
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << Sum(a, 10) << endl;
return 0;
}

int Sum(int array[], int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += array[i];
}
return sum;
}

但是这样写有个问题,如果数组长度不是 10,怎么自动获取呢?

我在网上找了个获取数组长度的方法,如下

1
2
3
4
5
6
7
int main(void)
{
int a[10] = {0};
int cnt = sizeof(a) / sizeof(a[0]);
printf("cnt = %d\n", cnt);
return 0;
}

然后改写 Sum 函数

1
2
3
4
5
6
7
8
int Sum(int array[]) {
int sum = 0;
int n = sizeof(array) / sizeof(array[0]);
for (int i = 0; i < n; i++) {
sum += array[i];
}
return sum;
}

然而打印的时候发现结果不对,因为

c 传 数组过去是 指针变量,指针的长度是 4
sizeof是求对象大小的 array是个地址为8字节 array[0]是一个int 4字节 所以除了是2

那到底怎么获取数组的长度呢?

其实我一直很疑惑,C 在函数外可以获取到数组长度那么在函数内怎么获取呢?

大佬觉得我这问题很蠢,新手也觉得我这个问题很蠢,那么我到底应该怎么写呢?

1
2
3
4
5
6
7
8
int Sum(int array[]) {
int sum = 0;
while(array != NULL) {
sum += *array;
array++;
}
return sum;
}

后记