What is the correct way to pass (and access) this particular array of pointers to a function? I have something like this, where ptr_arr will only point to some elements of arr:
void add_elements(int *A, int *B )
{
int add = A[2] B[2];
printf("%d\n", add);
}
int main()
{
int arr[] = { 10, 20, 30, 40, 50, 60 };
int *ptr_array[] = {&arr[0], &arr[1], &arr[3]}
int add_in_main = arr[2] *ptr_array[2];
printf("%d\n", add_in_main);
add_elements(arr, *ptr_array);
return 0;
}
But when I try to access ptr_array[2] inside the function I obtain arr[2] instead of arr[3] whereas when I do the same operation inside main I get what I want. What am I missing?
CodePudding user response:
*ptr_array is exactly the same as ptr_array[0].
If you want to pass an array of pointers, remember that arrays decays to pointer to their first elements. So e.g. plain ptr_array is the same as &ptr_array[0], and its type will be int **.
So change your signature to accept that argument, and dereference the selected pointer in B:
void add_elements(int *A, int **B )
{
int add = A[2] *(B[2]); // Added parentheses for clarity
printf("%d\n", add);
}
Call as:
add_elements(arr, ptr_array);
