C/C++ 中,数组的长度传递给函数的方式是通过指针。数组传递到函数时,实际上是传递了数组的首地址(即指针),因此函数内部无法直接获取数组的长度。C/C++ 中没有内建的机制来自动传递数组的长度,因此最常用的做法是通过额外的参数来传递数组的长度。如果使用 C++11 或以上,可以考虑使用 std::array 或 std::vector 来更方便地管理数组和其长度。

1、通过额外的参数传递数组的长度

最常见的方法是将数组长度作为额外的参数传递给函数。函数就可以使用该长度来处理数组。

#include <iostream>
using namespace std;

void printArray(int arr[], int length) {
    for (int i = 0; i < length; ++i) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int length = sizeof(arr) / sizeof(arr[0]);
    printArray(arr, length);  // 传递数组及其长度
    return 0;
}

2、使用 std::array(C++11 及以上)

在 C++11 中,std::array 是一个具有固定大小的容器,它可以自动保存数组的大小信息。因此,当传递 std::array 时,数组的大小可以直接访问。

#include <iostream>
#include <array>
using namespace std;

void printArray(const array<int, 5>& arr) {
    for (const auto& val : arr) {
        cout << val << " ";
    }
    cout << endl;
}

int main() {
    array<int, 5> arr = {1, 2, 3, 4, 5};
    printArray(arr);  // 直接传递 array
    return 0;
}

3、使用 std::vector(动态数组)

如使用动态数组(如 std::vector),可以直接利用 std::vector 提供的成员函数 size() 来获取数组的大小。

#include <iostream>
#include <vector>
using namespace std;

void printArray(const vector<int>& vec) {
    for (const auto& val : vec) {
        cout << val << " ";
    }
    cout << endl;
}

int main() {
    vector<int> vec = {1, 2, 3, 4, 5};
    printArray(vec);  // 直接传递 vector
    return 0;
}

4、在函数内部使用宏

可以通过宏来在函数中自动传递数组的大小,但这种方法通常不推荐使用,因为宏的调试和维护较为困难。

#include <iostream>
using namespace std;

#define ARR_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))

void printArray(int arr[]) {
    int length = ARR_SIZE(arr);  // 使用宏获取数组长度
    for (int i = 0; i < length; ++i) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    printArray(arr);  // 传递数组,宏自动计算长度
    return 0;
}

推荐文档