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
,整数数组使用特殊值如 -1
或 0
)
#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; }