Título: C-Punteros Publicado por: pacman22 en 7 Noviembre 2014, 02:03 am Hola, no estoy entendiendo como funcionan los punteros en c, y como funciona definir una variable tipo puntero, sobre todo al trabajar con listas enlazadas .
Esta es la estructura del nodo, según lo que entiendo yo , en tNodo tengo el dato a guardar, y la dirección del siguiente nodo . Y luego defino un alias tipo puntero (?) de tipo tNodo . Código: typedef struct Nodo{ Luego aca,por ejemplo al crear nodo , lo que hago es definir un puntero(nodo) de TipoLista(tNodo),lo que no entiendo es ahora, para modificar los valores que apunta esa direccion de memoria , no tengo que poner * primero, ejemplo *nodo->dato=carga_uno() ?? . Estoy confundido :S Código: TipoLista crear_nodo(){ Título: Re: C-Punteros Publicado por: eferion en 7 Noviembre 2014, 08:48 am Esta es la estructura del nodo, según lo que entiendo yo , en tNodo tengo el dato a guardar, y la dirección del siguiente nodo . Y luego defino un alias tipo puntero (?) de tipo tNodo . Código
Ahí estás definiendo una estructura, cuyo nombre oficial es "struct Nodo", a dicha estructura le asignas un alias, "tNodo". De esta forma "struct Nodo" y "tNodo" son equivalentes. Se podría hacer también en dos pasos (por si te resulta más claro): Código
En la primera línea se define la estructura "Nodo" y en la segunda creamos el alias. Código
Ahí estás creando un alias nuevo, "TipoLista", este alias es equivalente a "tNodo*", es decir, es un puntero a una estructura de tipo "tNodo" Código
Si TipoLista es un alias de "struct Nodo*" entonces sizeof(TipoLista) devuelve el tamaño de un puntero, no de una estructura. La consecuencia es que no estás reservando la memoria suficiente para almacenar una estructura de tipo "Nodo". Hay que ser cuidadoso a la hora de usar alias, si en algún momento no tienes claro el uso del alias vas a meter la pata fijo. Código
Ahora, malloc reservará una cantidad de memoria suficiente para almacenar un "struct Nodo" y te devolverá el puntero correspondiente, que sí podrás usar sin problemas porque no vas a pisar memoria que no te pertenece. no tengo que poner * primero, ejemplo *nodo->dato=carga_uno() ?? Hay dos formas de acceder a los elementos de una estructura a la que accedes a través de un puntero: Código
"siguiente1" y "siguiente2" van a apuntar ambas al mismo sitio. En el primer caso hemos hecho uso del operador de referencia "->". Este operador indica que nuestra variable es realmente un puntero y que accedemos a sus elementos por referencia, no por valor. En el segundo caso estamos haciendo uso del operador "*" que nos permite acceder por valor a los elementos del puntero, como ya no estamos trabajando con punteros debemos usar el operador "." para acceder a sus elementos. No se si con estas explicaciones te aclaro un poco el asunto. Si tienes más dudas no tengas inconveniente en preguntar. Un saludo. Título: Re: C-Punteros Publicado por: pacman22 en 7 Noviembre 2014, 10:37 am Genial! gracias :D ,ahora todo va cerrando conceptualmente en mi cabeza .
|