C语言 获取传递给函数的数组的长度

C语言中,当将数组传递给函数时,实际上传递的是数组首元素的指针,函数无法知道数组的大小。推荐的方法是显式地将数组的长度与数组一起传递,或者使用哨兵值标记数组的结束。另一种方法是使用结构体封装数组和它的长度,这对于处理更复杂的数据结构非常有用。

1、显式传递数组的长度

最直接的解决方法是将数组的长度与数组本身一起传递给函数。这是因为 C 语言中的数组在传递到函数时并不会携带大小信息。

#include <stdio.h>

void printArray(int arr[], int length) {
    for (int i = 0; i < length; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int length = sizeof(arr) / sizeof(arr[0]);  // 计算长度
    printArray(arr, length);
    return 0;
}

2、使用哨兵值(如 NULL 或特定数字)

另一种常见方法是使用哨兵值来标记数组的结束(如指针数组使用 NULL,整数数组使用特殊值如 -10

#include <stdio.h>

void printArray(int arr[]) {
    int i = 0;
    while (arr[i] != -1) {  // 哨兵值 (-1)
        printf("%d ", arr[i]);
        i++;
    }
    printf("\n");
}

int main() {
    int arr[] = {1, 2, 3, 4, 5, -1};  // 哨兵值作为结束标志
    printArray(arr);
    return 0;
}

3、使用结构体传递数组和长度

另一种选择是将数组和它的长度封装到一个结构体中,并将结构体传递给函数。

#include <stdio.h>

typedef struct {
    int *arr;
    int length;
} Array;

void printArray(Array array) {
    for (int i = 0; i < array.length; i++) {
        printf("%d ", array.arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    Array array = {arr, sizeof(arr) / sizeof(arr[0])};
    printArray(array);
    return 0;
}

推荐阅读
cjavapy编程之路首页