const int * 与 const int (*)[10]

问题描述 投票:0回答:1

我试图理解为什么以下代码不起作用:

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
不指向数组,它指向数组中的第一个元素。

这就是为什么我决定定义一个指针,指向数组的第一个元素。现在有什么问题吗?

c++ arrays pointers
1个回答
0
投票

arr[0]
的类型是
const int
,所以
&arr[0]
的类型是
const int*
。但由于数组参数的类型为
const int(*array)[10]
并且您传递的是
const int*
并且两者之间没有隐式转换,因此我们收到了上述错误。

要解决此问题,您可以执行以下操作:

auto ptrArray = &arr;
printArray(ptrArray); //works 
© www.soinside.com 2019 - 2024. All rights reserved.