Skip to content

C 语言中获取数组长度的方法

Published: at 09:53 AMSuggest Changes

写了一段求和代码如下

#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;
}

后记


Previous Post
Docker API 使用指南及 VSCode 集成
Next Post
Git 放弃本地修改,强制拉取更新