elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Cual es la diferencia? Duda con punteros y typedef
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cual es la diferencia? Duda con punteros y typedef  (Leído 6,181 veces)
freecom4ever

Desconectado Desconectado

Mensajes: 23



Ver Perfil
¿Cual es la diferencia? Duda con punteros y typedef
« en: 16 Febrero 2012, 03:48 am »

¿Me pueden explicar la diferencia?

Entiendo que typedef crea un nuevo tipo de dato a partir de un tipo de dato anterior, en este ejemplo el tipo de dato nuevo es struct nodo.  Pero el siguiente codigo que encontre utiliza un puntero (¿creo?) en mitad del typedef yo lo arregle y lo deje como debería ser (segun yo) en el Caso 2 pero no despeja mis dudas.

No me queda claro (si es que existe) la linea 2 del caso 1 y de existir cual es la diferencia con respecto al siguiente.

Nota: el struct esta definido previamente pero creo que no es importante al menos yo lo entiendo.

Saludos!

1.- Caso 1

Código:
typedef struct nodo tiponodo;
typedef tiponodo *ptiponodo;


2.-  Caso 2

Código:
typedef struct nodo tiponodo;
tiponodo *ptiponodo;

Por tomarte la molestia de leer el post.

Una persona en alguna parte del mundo estará muy feliz :D. Muchas Gracias!


En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: ¿Cual es la diferencia? Duda con punteros y typedef
« Respuesta #1 en: 16 Febrero 2012, 04:03 am »

El caso 1 es correcto.
Primero crea el tipo de dato "tiponodo".
Luego crea el tipo de dato "ptiponodo" (el cual es un puntero al tipo de dato tiponodo).

Por ende, en el programa, cuando quieras declarar un puntero al "tiponodo", simplemente se creará una variable de tipo "ptiponodo", ya que esa misma es un puntero a "tiponodo".

Espero no haberte mareado :P


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: ¿Cual es la diferencia? Duda con punteros y typedef
« Respuesta #2 en: 16 Febrero 2012, 04:47 am »

¡Buenas!

Lo que typedef hace es crear un alias de algun tipo de dato:

Código
  1. typedef int* int_ptr; //cada vez que declares una variable de tipo int_ptr esta sera de tipo int*
  2.  
  3. typedef struct cosa cosa;
  4. //ahora cuando quieras declarar una variable de tipo struct cosa, te puedes ahorrar la palabra struct, porque cosa es lo mismo que struct cosa
  5.  
  6. //...
  7.  

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
freecom4ever

Desconectado Desconectado

Mensajes: 23



Ver Perfil
Re: ¿Cual es la diferencia? Duda con punteros y typedef
« Respuesta #3 en: 16 Febrero 2012, 05:07 am »

Amigo, de verdad muchas gracias.

peor lo siento por tratar de entender con manzanitas...  :huh: pero hay cosas que no comprendo todavia.

¿se refiere a algo como esto?

Codigo 1:
Código:
#include <stdio.h>
#include <stdlib.h>

int main()
{
typedef int entero;
typedef entero *puntero;
entero variable=6;
puntero pvariable=&variable;
printf("%d %d", *pvariable &variable);
}

No logro terminar de entender "typedef entero *puntero;" no deberia ser "*puntero" un tipo de dato? ¿porque desaparece el *? yo entiendo que el tipo de dato es puntero en el ejemplo y no *puntero... ¿porque?

pd: para llegar al codigo de arriba fui probando esto hasta que llegue a eso... (puedo estar equivocado)

Codigo 2:
Código:
#include <stdio.h>
#include <stdlib.h>

int main()
{

int variable=6;
int *puntero=&variable;
printf("%d %d", *puntero &variable); */
}

Codigo 3:
Código:
#include <stdio.h>
#include <stdlib.h>

int main()
{

typedef int entero;
entero variable=6;
entero *puntero=&variable;
printf("%d %d", *puntero &variable);
}

¿Codigo 3 es la traducción de Codigo 1?

Muchas gracias... se pasaron n_n gracias de corazon!
« Última modificación: 16 Febrero 2012, 05:09 am por freecom4ever » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: ¿Cual es la diferencia? Duda con punteros y typedef
« Respuesta #4 en: 16 Febrero 2012, 08:31 am »

Citar
Código:
1.-  Caso 1

typedef struct nodo tiponodo;
typedef tiponodo *ptiponodo;


2.-  Caso 2

Código:
typedef struct nodo tiponodo;
tiponodo *ptiponodo;

en el primer caso creas un alias de tipo nodo que se llamara "tiponodo"
luego creas otro alias de tipo puntero a tiponodo que se llamara "ptiponodo"

en el segundo caso creas un alias de tipo estructura nodo que se llamara "tiponodo"
luego la segunda linea del caso 2 haces una declaracion de un puntero de tipo "tiponodo" que se llama "ptiponodo".

en conclusion en el primer caso solo haces definiciones de tipos para variables, no declaras nada de variables ni puntero, en cambio en el segundo
caso; en la segunda linea haces una declaracion de un puntero a una estructura que esta a su vez es de tipo "nodo".



En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: ¿Cual es la diferencia? Duda con punteros y typedef
« Respuesta #5 en: 16 Febrero 2012, 15:11 pm »


Código:
#include <stdio.h>
#include <stdlib.h>

int main()
{
typedef int entero;
typedef entero *puntero;
entero variable=6;
puntero pvariable=&variable;
printf("%d %d", *pvariable &variable);
}

Asi es. El tipo de dato es int *, que significa puntero a int.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: ¿Cual es la diferencia? Duda con punteros y typedef
« Respuesta #6 en: 16 Febrero 2012, 17:27 pm »

pd: para llegar al codigo de arriba fui probando esto hasta que llegue a eso... (puedo estar equivocado)
No hagas eso. En su lugar lee un buen libro y en base a el avanzas, en caso de duda el mentado o foros como este.

Ello porque en C cuando ocurre un error se genera "comportamiento no definido", en otras palabras todo mundo se lava las manos, puede ocurrir cualquier cosa y, por supuesto, la culpa es del programador. Sacar en base a ello conclusiones no es una buena idea.

En cuanto al ultimo programa tiene dos errores en la llamada a printf:
Código:
printf("%d %d", *puntero &variable);
Falta la coma que separa a los dos últimos argumentos y si se desea imprimir una dirección de memoria se debe utilizar "%p" y convertir el puntero explícitamente al tipo "void *", de esta forma:
Código
  1. printf("%d %p\n", *puntero, (void *) &variable);

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C]Duda, typedef.
Programación C/C++
Binary_Death 2 2,254 Último mensaje 15 Agosto 2010, 07:42 am
por Binary_Death
Duda sobre lista de un typedef struct
Programación C/C++
Ccomplica 1 1,469 Último mensaje 1 Noviembre 2013, 22:02 pm
por m@o_614
Diferencia entre usar aritmetica de punteros y corchetes en vectores en C
Programación C/C++
xoker 4 2,342 Último mensaje 26 Diciembre 2013, 13:27 pm
por ivancea96
Duda sobre el typedef en las clases
Programación C/C++
class_OpenGL 7 2,676 Último mensaje 21 Abril 2016, 08:38 am
por class_OpenGL
typedef struct con punteros
Programación C/C++
a1ex 4 1,460 Último mensaje 20 Abril 2019, 11:23 am
por a1ex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines