我在函数方面遇到数组指针(c++)的问题

I have a problem with array pointers (c++) in therms of functions

我是指针的新手,想学习它们。

出于学习原因,我创建了一个脚本,该脚本应该采用 Python 的 len() 数组函数来获取数组的大小。所以我写了下面的代码:

int len(int *arrPtr){
    int arrSize = *(&arrPtr + 1) - arrPtr;
    return arrSize;
}

int main(){
    int arr[] = {1,2,3,4,5};
    int lenArr = len(arr);

    cout << "lenght of array: " << lenArr;
}

当我执行代码时,我得到一个随机数:

我试图找到解决方案,但我失败了。我发现通过将数组的指针索引地址增加 1,无论在函数内部还是函数外部,我都会得到一个不同的地址。在 main() 函数中,相同的代码有效。

#include <iostream>
using namespace std;

int len(int *arrPtr){
    cout << "inside func: " << arrPtr << endl;
    cout << "inside func: " << &arrPtr + 1 << '\n' << endl;
    int arrSize = *(&arrPtr + 1) - arrPtr;
    return arrSize;
}

int main(){
    int arr[] = {1,2,3,4,5};

    cout << "outside func: " << arr << endl;
    cout <<  "outside func: " << &arr + 1 << '\n' << endl;

    int lenArr = len(arr);
    cout << "lenght of array: " << lenArr;
}

这是带有更改地址输出的代码:

terminal output:
outside func: 0x1f961ffb90
outside func: 0x1f961ffba4

inside func: 0x1f961ffb90
inside func: 0x1f961ffb78

lenght of array: 444072222

还有输出,我们可以看到地址变化不同:

希望有人能给我一个解决方案

这是处理数组大小的方法:

#include <array>
#include <iostream>
//using namespace std; // don't do this.

template<std::size_t N>
void function(const int(&arr)[N])
{
    std::cout << "std::array from function, len = " << N << "\n";
    std::cout << "arr[2] = " << arr[2] << "\n";
}

void function2(const std::array<int, 5>& arr)
{
    std::cout << "std::array from function2, len = " << arr.size() << "\n";
    std::cout << "arr[2] = " << arr[2] << "\n";
}

int main()
{
    int arr[] = { 1,2,3,4,5 };

    auto len1 = sizeof(arr) / sizeof(int); // do it where the size of the array is still known.
    std::cout << "len 1 =  " << len1 << "\n";
    function(arr);

    // or use std::array which behaves more like any other class
    // and which always knows its size

    std::array<int, 5> arr2{ 1,2,3,4,5 };
    std::cout << "std::array len = " << arr2.size() << "\n";

    function2(arr2);
}