Declare a C/C++ function returning pointer to array of integer pointers
Declare “a function with argument of int* which returns pointer to an array of 4 integer pointers”.
At the first glance it may look complex, we can declare the required function with a series of decomposed statements.
1. We need, a function with argument int *,
function(int *)
2. a function with argument int *, returning pointer to
(*function(int *))
3. a function with argument int *, returning pointer to array of 4
(*function(int *))[4]
4. a function with argument int *, returning pointer to array of 4 integer pointers
int *(*function(int *))[4];
How can we ensure that the above declaration is correct? The following program can cross checks our declaration,
#include<stdio.h> // Symbolic size #define SIZE_OF_ARRAY (4) // pointer to array of (SIZE_OF_ARRAY) integers typedef int *(*p_array_t)[SIZE_OF_ARRAY]; // Declaration : compiler should throw error // if not matched with definition int *(*function( int *arg))[4]; // Definition : 'function' returning pointer to an // array of integer pointers p_array_t function( int *arg) { // array of integer pointers static int *arr[SIZE_OF_ARRAY] = {NULL}; // return this p_array_t pRet = &arr; return pRet; } int main() { } |
The macro SIZE_OF_ARRAY is used for symbolic representation of array size. p_array_t is typedefined as “pointer to an array of 4 integers”. If our declaration is wrong, the program throws an error at the ‘function‘ definition.
Contact Us