Home > database >  How do you use this: int (*x(int))[5]
How do you use this: int (*x(int))[5]

Time:09-22

int (*x(int))[5] says x is a function that takes an int argument, and returns a pointer to an integer array of 5 elements.

I can also use typedef to simplify x:

typedef int Array[5];
typedef Array *Array_ptr;
typedef Array_ptr Array_ptr_fn(int);

My question is, how do I use this type Array_ptr_fn?

// Define some_x to have type Array_ptr_fn,
 
Array_ptr_fn some_x;

// But then how do I use some_x since function cannot return array.

CodePudding user response:

The first thing to note is that x is not a function pointer, but an actual function declaration. It's not a variable. A pointer to x would have the type int (*(*ptr_to_x)(int))[5].

The second thing to note is that the return value of x is neither int[5], nor int[], nor int*, but int (*)[5]. That is, you need to write (*retval)[0] to get to an actual int value.

With that in mind, it's not that hard to write a proof of concept that uses these types:

#include <stdio.h>

int arr[5] = { 11, 22, 33, 44, 55 };
int (*ptr)[5] = &arr;

int (*x(int ignored))[5]
{
    return ptr;
}

int main(void)
{
    int (*(*ptr_to_x)(int))[5] = &x;

    int (*i)[5] = ptr_to_x(123);
    printf("%d\n", (*i)[2]);

    return 0;
}
  • Related