Home > Software design >  Incompatible pointer type for array
Incompatible pointer type for array

Time:12-01

New learner here; I am performing a traverse on any given array but I find I get this error:

exe_3.c:18:27: warning: incompatible pointer types passing 'int *' to parameter of type 'int **' [-Wincompatible-pointer-types]
    int result = traverse(&arr[6], &n);
                          ^~~~~~~
exe_3.c:4:25: note: passing argument to parameter 'A' here
const int traverse(int *A[], int *N){

What I have tried:

#include <stdio.h>
#include <stdlib.h>

const int traverse(int *A[], int *N){
    int i = 0;
    int arr[*N];
    while(i < *N){
        arr[i] = *A[i];
        i  = 1;
    }
    return *arr;
}

int main(){
    int arr[6] = {1, 2, 3, 4, 5, 6};
    int n = sizeof(arr)/sizeof(arr[0]);

    int result = traverse(&arr, &n);
    printf("%i\n", result);
    return EXIT_SUCCESS;
}

CodePudding user response:

Your call traverse(&arr, &n); passes a pointer to the array arr to the function traverse.

You get the error message, because the correct type definition for a pointer to an array of integers is int(A*)[]. You have that type in the definition of the traverse function incorrect (your line 4).

You will see that this is not enough to compile your code. When accessing the elements of such an array via that pointer you need the expression (*A)[i]. You have that access in the implementation of the traverse function incorrect (your line 8).

See also here for more details: C pointer to array/array of pointers disambiguation

What I find also strange with your traverse function is that the array arr is not used. Only the first value is returned. The variable i is not used, either. I suppose your code is just not complete.

  •  Tags:  
  • c
  • Related