写了一段求和代码如下
#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,怎么自动获取呢?
我在网上找了个获取数组长度的方法,如下
int main(void)
{
int a[10] = {0};
int cnt = sizeof(a) / sizeof(a[0]);
printf("cnt = %d\n", cnt);
return 0;
}
然后改写 Sum 函数
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 在函数外可以获取到数组长度那么在函数内怎么获取呢?
大佬觉得我这问题很蠢,新手也觉得我这个问题很蠢,那么我到底应该怎么写呢?
int Sum(int array[]) {
int sum = 0;
while(array != NULL) {
sum += *array;
array++;
}
return sum;
}
后记
- https://www.scaler.com/topics/length-of-an-array-in-c/
- https://www.techiedelight.com/find-size-of-an-array-c/
- https://iq.opengenus.org/length-of-array-in-c/
- https://www.digitalocean.com/community/tutorials/find-array-length-in-c-plus-plus
- https://www.scaler.com/topics/length-of-an-array-in-c/
- http://c.biancheng.net/view/1993.html
- https://blog.csdn.net/we1583004we/article/details/80663180#:~:text=C%E8%AF%AD%E8%A8%80%E6%97%A0%E6%B3%95%E7%9B%B4%E6%8E%A5%E8%8E%B7%E5%8F%96,%E6%95%B0%E5%B0%B1%E6%98%AF%E6%95%B0%E7%BB%84%E7%9A%84%E9%95%BF%E5%BA%A6%E3%80%82
- http://c.biancheng.net/view/186.html
- https://www.cnblogs.com/lyqf/p/10720090.html