Declarar una función C/C++ que devuelve un puntero a una array de punteros enteros

Declare «una función con argumento de int* que devuelve un puntero a una array de 4 punteros enteros».

A primera vista puede parecer complejo, podemos declarar la función requerida con una serie de sentencias descompuestas.

1. Necesitamos una función con argumento int * ,

function(int *)

2. una función con argumento  int * , que devuelve el puntero a

(*function(int *))

3. una función con argumento  int * , que devuelve el puntero a la array de 4

(*function(int *))[4]

4. una función con argumento  int * , que devuelve el puntero a una array de 4 punteros enteros

int *(*function(int *))[4];

¿Cómo podemos asegurarnos de que la declaración anterior es correcta? El siguiente programa puede cotejar nuestra declaración,

#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()
{          
}

La macro SIZE_OF_ARRAY se utiliza para la representación simbólica del tamaño de la array. p_array_t se define como «puntero a una array de 4 enteros». Si nuestra declaración es incorrecta, el programa arroja un error en la definición de la ‘ función ‘.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *