无法将 int(*)[5] 转换为 int*

Cannot convert int(*)[5] to int*

当我尝试使用指针访问数组元素时出现此错误我不明白如何借助指针进行访问。

Error: cannot convert ‘int (*)[5]’ to ‘int*’ for argument ‘1’ to ‘void addd(int*, int)

任何关于此事的指导将不胜感激!

#include <iostream>
using namespace std;

    void addd(int *ptr,int length)
    {
       cout<<"The values in the array are: ";
       for(int i = 0; i < length; i++) {
          cout<< *ptr <<" ";
          ptr++;
       }
    }
    
    
    int main() {
       int arr[5] = {1, 2, 3, 4, 5};
       
       addd(&arr,5);
       
       //int *ptr = &arr[0];
       return 0;
    }

您的函数接收指向 int 的指针,因此您应该只传递第一个元素的地址。

你可以做到:

addd(&arr[0],5);

或者简单地说:

addd(arr,5);

你做错了。 &arr 表示 int (*)[5],但您使用的是 int *ptr。所以,你必须像下面这样使用:

addd(arr, 5); // this is correct
// addd(&arr, 5) // this is wrong

在这里,arr 被传递为 int *

数组和指针几乎 inter-related 彼此。默认情况下,数组指向第一个元素的地址,即索引为 0 的元素。因此,使用数组和指针几乎是一回事(并非每次都如此)。因此,您不需要将数组传递为

addd(&arr,5);

你应该只做

addd(arr,5);

另外,我会说, 该声明 addd(&arr[0],5); 完成了工作,但不是继续进行的好方法。

当您将数组传递给函数时,例如:

addd(arr,5);

然后数组被隐式转换为指向其第一个元素的指针,int*。除了依赖隐式转换,您还可以将其显式化:

addd( &arr[0],5);
   //      ^-  first element
   // ^------  address-of first element

但是,数组不是指针,获取数组的地址会产生指向数组的指针:

using pointer_to_array = int (*)[5];
pointer_to_array p = &arr;