简体   繁体   中英

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

When i tried to access array elements using pointer I got this error i don't understand how can i access with the help of pointer.

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

Any guidance on the matter would be greatly appreciated!

#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;
    }

Your function receives a pointer to int , so you should just pass the address of the first element.

You can do that:

addd(&arr[0],5);

or simply:

addd(arr,5);

You're doing it wrong. &arr means int (*)[5] , but you are using int *ptr . So, you've to use like below:

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

Here, arr is passed as int *

When you pass an array to a function, for example:

addd(arr,5);

then the array is implicitly converted to a pointer to its first element, an int* . Instead of relying on the implicit conversion, you can make it explicit:

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

However, arrays are not pointers and taking the address of the array yields a pointer to an array:

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

arrays and pointers are pretty much inter-related to each other. An array by default points to the address of the first element, that is the element at index 0. So, working with arrays and pointers are pretty much the same thing( not every time ). So, you do not need to pass on the array as

addd(&arr,5);

you should simply do just

addd(arr,5);

Also, i will say, The statement addd(&arr[0],5); does the job, but not a good way to proceed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM