[C con Clase] ¿Cual es la diferencia? Duda con punteros y typedef

Steven Davidson srd4121 en njit.edu
Jue Feb 16 11:42:04 CET 2012


Hola Jorge,

2012/2/16 Jorge Mendez <freecom4ever en gmail.com>:
> ¿Me pueden explicar la diferencia?
>
> No me queda claro (si es que existe) la linea 2 del caso 1.
>
> Nota: el struct esta definido pero creo que no es importante al menos yo lo
> entiendo.
>

Veamos cada caso.

> Saludos!
>
> 1.- Caso 1
>
> typedef struct nodo tiponodo;
> typedef tiponodo *ptiponodo;
>
>

Aquí estamos definiendo un nuevo tipo llamado 'ptiponodo' que en
realidad es un nuevo nombre para referirnos al tipo 'tiponodo *'.
Ahora podemos hacer esto:

ptiponodo nodo1, nodo2, var, ptr;

y cualquier otra definición de una variable que queramos. Obviamente,
como tipo de dato podemos usar su nombre para indicar el tipo de un
parámetro en el prototipo de una función. Por ejemplo,

void func( ptiponodo p1, ptiponodo p2, int nCant );

y cuanto queramos hacer con un tipo de dato.

> 2.-  Caso 2
>
> typedef struct nodo tiponodo;
> tiponodo *ptiponodo;
>

Aquí estás definiendo la variable, 'ptiponodo', que es de tipo
'tiponodo *'. Podemos usarla como cualquier otra variable, con la
característica de que se trata de un puntero, así que debería apuntar
a alguna otra variable en memoria.

En cuanto a 'tiponodo', ciertamente no es necesario, porque podemos
usar el nombre de la estructura directamente, en lugar de crear un
nuevo nombre. Sin embargo, a veces sí es una buena idea hacer esto,
desde el punto de vista de diseño, ya que podríamos cambiar la
definición de 'tiponodo' durante el mantenimiento del código fuente.
Por ejemplo, quizá nos interese hacer esto:

typedef supernodo tiponodo;

El resto del código no tiene por qué modificarse, ya que se basa en
'tiponodo', pero su definición sí ha cambiado.


Espero haber aclarado las dudas.

Steven




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