我试图理解为什么以下代码不起作用:
void printArray(const int(*array)[10])
{
cout << sizeof(array) << endl;
}
int main()
{
const int arr[10] = { 1, 2 };
const int* ptrArr = &arr[0];
printArray(ptrArr);
}
const int(*array)[10]
-> array 是一个指向具有 10 个 const int
类型元素的数组的指针。
一开始,我以为只要
arr
就可以调用该函数,但没有成功。也许在这种情况下它不起作用的原因是因为 arr
不指向数组,它指向数组中的第一个元素。
这就是为什么我决定定义一个指针,指向数组的第一个元素。现在有什么问题吗?
arr[0]
的类型是const int
,所以&arr[0]
的类型是const int*
。但由于数组参数的类型为 const int(*array)[10]
并且您传递的是 const int*
并且两者之间没有隐式转换,因此我们收到了上述错误。
要解决此问题,您可以执行以下操作:
auto ptrArray = &arr;
printArray(ptrArray); //works