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