提问者:小点点

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


当我尝试使用pointer访问数组元素时,我遇到了这个错误,我不明白如何使用pointer来访问。

错误:无法将参数“%1”的“int(*)[5]”转换为“int*”,将其转换为“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;
    }

共3个答案

匿名用户

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

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;

匿名用户

您的函数接收到一个指向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*传递