Cuando tengas una duda por favor indica el lenguaje de programacion.
En el caso de C ...
Si se declara en la funcion "f" una variable "a" y se quiere modificar esta en otra funcion "g" se debe emular el paso por referencia. Eso aplica sin importar el tipo de la variable.
1) Declaras en la funcion main la variable "primero" y esta almacena la direccion en memoria del primer nodo (por eso es un puntero).
2) Defines una funcion "insertar" y debe tener la capacidad de insertar en cualquier lugar, incluso modificando cual sera el primer nodo y por ello debe tener la capacidad de modificar una variable de otra funcion (la variable "primero" de la funcion main).
Es debido al punto 2 que debe pasarse su direccion en memoria.
Un ejemplo para explicarlo mejor:
Un saludo
En el caso de C ...
Cita de: m@o_614 en 12 Enero 2014, 03:15 AMpor que en algunas ocasiones se tienen que pasar los punteros por referencias?Porque en C todo se pasa por valor.
Si se declara en la funcion "f" una variable "a" y se quiere modificar esta en otra funcion "g" se debe emular el paso por referencia. Eso aplica sin importar el tipo de la variable.
Cita de: m@o_614 en 12 Enero 2014, 03:15 AMcuando estas haciendo una lista enlazada y quieres insertar por la cabeza, por que tienes que pasar el puntero por referenciaVeamos:
1) Declaras en la funcion main la variable "primero" y esta almacena la direccion en memoria del primer nodo (por eso es un puntero).
2) Defines una funcion "insertar" y debe tener la capacidad de insertar en cualquier lugar, incluso modificando cual sera el primer nodo y por ello debe tener la capacidad de modificar una variable de otra funcion (la variable "primero" de la funcion main).
Es debido al punto 2 que debe pasarse su direccion en memoria.
Cita de: m@o_614 en 12 Enero 2014, 03:15 AMno se supone que el puntero ya almacena una direccion de memoriaSi pero lo que se necesita no es poder modificar el primer nodo sino modificar la variable que almacena ese valor (la variable "primero" de main).
Un ejemplo para explicarlo mejor:
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
void fn(int **pa_p, int **pa_q);
int main(void)
{
int a = 1;
int b = 9;
/* "p" apunta a "a", "q" apunta a "b" */
int *p = &a;
int *q = &b;
/* Imprimimos los valores de los objetos apuntados */
printf("%d %d\n", *p, *q);
/* Se intercambian los valores de las variables "p" y "q" */
fn(&p, &q);
/* Imprimimos los valores de los objetos apuntados */
printf("%d %d\n", *p, *q);
return EXIT_SUCCESS;
}
void fn(int **pa_p, int **pa_q)
{
int *aux;
aux = *pa_p;
*pa_p = *pa_q;
*pa_q = aux;
}
Un saludo