[C con Clase] Declaración e inicialización de punteros y typedef.

Davidson, Steven srd4121 en njit.edu
Sab Mar 3 17:30:03 CET 2018


Hola Marcelinux,

Para el primer caso, sí podrías definir el tipo de dato completamente. Por
ejemplo,

typedef int * (*tipo_array_ptr_puntero)[7];

tipo_array_ptr_puntero  ptr;

El problema vendría a la hora de usar el operador 'new' o 'new[]', ya que
necesitas el tipo del dato apuntado, y no el tipo del puntero. Es decir, lo
siguiente es incorrecto:

ptr = new tipo_array_ptr_puntero;

El operador 'new' necesita el tipo: 'int * [7]', que es el tipo del dato
apuntado.

Lo que podríamos hacer es crear dos tipos de datos en una sola sentencia
'typedef'. Por ejemplo,

typedef int * tipo_array_ptr[7], * tipo_array_ptr_puntero;

tipo_array_ptr_puntero  ptr;

ptr = new tipo_array_ptr;


Para el último caso, tienes que separar las dos sentencias en dos
sentencias. En otras palabras, no puedes declarar una variable y definir un
tipo en una sola sentencia: son dos sentencias diferentes.


Espero haber aclarado las dudas.

Steven


2018-03-03 2:32 GMT-05:00 marcelinux <marcelinator en gmail.com>:

> El pasado 2018-03-02 14:54:38, Steven Davidson escribió:
>
> SD> Hola Marcelinux,
> SD> 1. Como ya sabes, sintácticamente un puntero se define con un
> astersico y
> SD> ...
> SD> usar 'typedef' para aclararnos; esto es,
> SD> typedef int * tipo_array_ptr[7];
> SD> tipo_array_ptr *ptr;
> SD> Esto es definitivamente mejor cuando queremos crear memoria
> dinámicamente
> SD> usando 'new' o 'new[]'; por ejemplo,
> SD> ptr = new tipo_array_ptr[100];
>
> De acuerdo. Entonces, ¿debo hacerlo en "dos veces"?
> ¿Podría hacerse con un único typedef *(int *)[7] tipo_array_ptr  ?
> ¿Para usar tipo_array_ptr puntero?
> puntero = new tipo_array_ptr;
> puntero[0] = &entero[0];
> Creo que es demasiado anidamiento para mí (de momento).
>
> SD> 2. Esto no tiene mucho misterio. Solamente necesitas ir poco a poco:
> SD> array de 8 elementos:
> SD> ¿? array[8];
> SD> cada elemento es un array de 7 elementos:
> SD> ¿? array[8][7];
> SD> que a su vez cada elemento es un puntero a 'int':
> SD> int * array[8][7];
>
> typedef int*array[8][7] tipo_array_ptr;
> tipo_array_ptr puntero;
> puntero[0] = array1;
> puntero[1] = array2;
> etc.
>
>
> SD> Espero haber aclarado las dudas.
> SD> Steven
>
> Muchísimas gracias.
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20180303/b1a54904/attachment.html>


Más información sobre la lista de distribución Cconclase