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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Me podrian explicar como funciana los punteros en una pila con el sgte ejercic?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Me podrian explicar como funciana los punteros en una pila con el sgte ejercic?  (Leído 2,159 veces)
maicol_962016

Desconectado Desconectado

Mensajes: 7


Ver Perfil
¿Me podrian explicar como funciana los punteros en una pila con el sgte ejercic?
« en: 22 Febrero 2016, 21:42 pm »

alguien me podría explicar esta forma de usar punteros es que no me queda muy clara y me confundo.

typedef struct nodo{
int valor;
struct nodo *siguiente;
}tiponodo;
typedef tiponodo *pila; //esta es la parte q no me queda tan clara ya q lo q entiendo es que estamos //creando un puntero que va contener direcciones de memoria de la estructura tiponodo que se llama pila y con typedef lo podemos declarar con el nombre //pila;

typedef tiponodo *pnodo;//y en esta linea hacemos lo mismo q lo anterior
void push(pila *pil,int v);
int main(){
pila pil=NULL; //aqui creo q el contenido de este puntero es una direccion nula
push(&pil,5); //aqui creo que estamos enviando la direccion de memoria de pil q es un puntero
push(&pil,8);
push(&pil,10);
return 0
}
void push(pila *pil,int v){//aqui esta parte si no entiendo nada xq se supone q pila ya es un puntero y xq creamos un puntero de tipo puntero y se me hace confuso.

pnodo nuevo=(pnodo)malloc(sizeof(tiponodo));
nuevo->valor=v;
nuevo->siguiente=*pil;
*pil=nuevo;
}


En línea

sodark

Desconectado Desconectado

Mensajes: 81


Ver Perfil WWW
Re: ¿Me podrian explicar como funciana los punteros en una pila con el sgte ejercic?
« Respuesta #1 en: 22 Febrero 2016, 22:32 pm »

Explica que es lo que no entiendes exactamente.


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.533



Ver Perfil
Re: ¿Me podrian explicar como funciana los punteros en una pila con el sgte ejercic?
« Respuesta #2 en: 22 Febrero 2016, 22:50 pm »

Es confuso al principio pero debes visualizarlo de esta forma:

Las funciones, al recibir parámetros, reciben copias de los datos. Cuándo reciben un puntero, lo que reciben es una copia del puntero. Jugar con ésto permite al programador poder modificar los valores de una variable externa, como bien sabes, al pasar la referencia de esa variable.

Si miras el código se necesita variar el puntero en sí:
Código
  1. void push(pila *pil, int v) {
  2.   pnodo nuevo = malloc(sizeof(tiponodo));
  3.   nuevo->valor = v;
  4.   nuevo->siguiente = *pil;
  5.   *pil = nuevo;
  6. }

Como puedes ver en la linea 5 el valor de pil, que en realidad es una dirección de memoria, recibe el valor del puntero nuevo. Si no se hubiera usado un puntero a puntero en la llamada a la función, ésta trabajaría con una copia local de la dirección del puntero pil y, al salir del ámbito de la función push, no habría habido cambios en main, con lo que el programa no haría lo que debería hacer.

La forma de trabajar es la misma que si fuera un dato normal:
Por ejemplo una función declarada así
Código
  1. void cambiar_int(int* i);
ya puedes imaginar que se cambiará el contenido del entero i que se le pase con
Código
  1. cambiar_int(un_numero);
Pues de la misma forma puedes esperarte que a la siguiente función
Código
  1. void cambiar_direccion(int** p);
servirá para que puedas cambiar la dirección a la que apunta un puntero que le pases así:
Código
  1. cambiar_direccion(&un_puntero_a_int);
Aunque cuidado, porqué también se puede referir a que se va a pasar una tabla, pero eso ya es otro tema.
En línea

furciorifa

Desconectado Desconectado

Mensajes: 94


Ver Perfil
Re: ¿Me podrian explicar como funciana los punteros en una pila con el sgte ejercic?
« Respuesta #3 en: 23 Febrero 2016, 04:00 am »

Primero que nada te recomiendo leer Understanding and Using pointers in C es de la editorial O'reilly , lo subiría aquí pero son muy especiales a la hora de compartir contenido de este tipo.
En línea

lfgmespino

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: ¿Me podrian explicar como funciana los punteros en una pila con el sgte ejercic?
« Respuesta #4 en: 28 Febrero 2016, 00:34 am »

Debería quedar así.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct nodo{
  5. int valor;
  6. struct nodo *siguiente;
  7. } tiponodo;
  8.  
  9. typedef tiponodo* pPila; //En pPila se guardará la dirección del primer elemento de la lista (pila)
  10. typedef tiponodo* pNodo; //Se define un nuevo tipo de dato, pNodo, que es un Puntero a una struct nodo (tiponodo)
  11.  
  12. void push(pPila *ptr, int v);
  13. int  pop(pPila *ptr);
  14.  
  15. int main() {
  16.  
  17. pPila *pila = NULL; //Se pone a cero la dirección contenida en pila. Es decir, lista vacía.
  18.  
  19. push(&pila, 5); //Se pasa la dirección de la pila
  20. push(&pila, 8);
  21. push(&pila, 10);
  22. printf("\n%d", pop(&pila));
  23. printf("\n%d", pop(&pila));
  24. printf("\n%d", pop(&pila));
  25.  
  26.  
  27. return 0
  28. }
  29.  
  30. void push(pPila *ptr, int v){ //Pasamos a la función la dirección de un elemento tipo pila.
  31.  
  32. pNodo nuevo = (pNodo ) malloc(sizeof(tiponodo)); //Se crea un nuevo nodo
  33. if (nuevo == NULL) exit(1);
  34. nuevo->valor = v;
  35. nuevo->siguiente = *ptr; //Se guarda la dirección del hasta ahora primer elemento de la lista
  36. *ptr = nuevo; //Se anota en pila la dirección de este nuevo nodo, que pasa a ser el primero
  37. }
  38.  
  39. int  pop(pPila *ptr){ //Pasamos a la función la dirección de un elemento tipo pila.
  40.  
  41.   pNodo ptrTemp; //Se crea una direccion a tiponodo para poder luego liberar memoria
  42.   int num;
  43.  
  44. if (*ptr == NULL) printf ("\nPila vacía.");
  45.   else {
  46. ptrTemp = *ptr; //Se guarda la dirección del primer elemento de la pila
  47. num =  ptrTemp->valor;
  48. *ptr = ptrTemp->siguiente; //Pila coge la dirección del siguiente elemento al primero, con lo que primero está listo para eliminar
  49. free(ptrTemp);
  50.       }
  51.  
  52.  return num;    
  53. }
  54.  
  55.  
En línea

furciorifa

Desconectado Desconectado

Mensajes: 94


Ver Perfil
Re: ¿Me podrian explicar como funciana los punteros en una pila con el sgte ejercic?
« Respuesta #5 en: 6 Marzo 2016, 15:24 pm »

La manera más fácil de visualizar es para modificar
Código
  1. int x=3
pasándolo a una función
Código
  1. void modifica(int * modificar)
  tenemos que pasar por referencia & x entonces lo que quieres modificar es un puntero pero por referencia entonces debes usar un puntero a puntero para poder modificar este
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Me podrian explicar como hacer esto:
Diseño Gráfico
BACKFIRE 6 3,472 Último mensaje 22 Abril 2009, 23:56 pm
por Og.
me podrian explicar que es data en el siguiente codigo en jquery??
Desarrollo Web
jhonatanAsm 4 2,482 Último mensaje 20 Diciembre 2011, 15:21 pm
por jhonatanAsm
me podrian explicar el sgte codigo en php
PHP
jhonatanAsm 9 2,711 Último mensaje 25 Diciembre 2011, 03:49 am
por jhonatanAsm
cuál es el trabajo de array_pop() en el sgte code
PHP
jhonatanAsm 8 3,281 Último mensaje 15 Febrero 2012, 22:19 pm
por jhonatanAsm
[Python3] Me podrian explicar el funcionamiento.
Scripting
reconFito 1 625 Último mensaje 27 Junio 2020, 12:09 pm
por tincopasan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines