【发布时间】:2021-11-29 17:12:28
【问题描述】:
我是指针新手,想学习它们。
出于学习原因,我创建了一个脚本,该脚本应采用 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
还有输出,我们可以看到地址变化不同:
希望有人能给我一个解决方案。
【问题讨论】:
-
仅使用指向其元素之一的指针无法获取数组的大小
-
你无法像这样确定数组的大小。当您将数组作为指针传递时,所有大小信息都会丢失。
-
好的,我明白了,感谢您的快速帮助!!!
标签: c++ arrays function pointers arraylist