Cuando tengas una duda
por favor indica el lenguaje de programacion.
En el caso de C ...
por 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.
cuando estas haciendo una lista enlazada y quieres insertar por la cabeza, por que tienes que pasar el puntero por referencia
Veamos:
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.
no se supone que el puntero ya almacena una direccion de memoria
Si 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:
#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 */
/* Se intercambian los valores de las variables "p" y "q" */
fn(&p, &q);
/* Imprimimos los valores de los objetos apuntados */
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