Es la única manera de conseguir la dirección de una dirección en C (frente a la doble eliminar la referencia a tener una variable intermediadirección C de una dirección de una variable
por ejemplo, he:?
int a;
int b;
int *ptr_a;
int *ptr_b;
int **ptr_ptr_a;
a = 1;
ptr_a = &a;
ptr_ptr_a = &(&a); <- compiler says no
ptr_ptr_a = &&a; <- still compiler says no
ptr__ptr_a = &ptr_a; <- ok but needs intermediate variable
pero se puede hacer a la inversa, por ejemplo
b = **ptr_ptr_a; <- no intermediate variable required
por ejemplo, no tengo que hacer:
ptr_b = *ptr_ptr_b;
b = *ptr_b;
¿Por qué los dos operadores no son simétricos en su funcionalidad?
Porque el puntero debe apuntar a algo de memoria. entonces, 'ptr_a = & a' significa que ptr_a apunta a a. pero, '&& a' -> no hay un 'puntero' al que apunte el puntero. ptr_a es algo de memoria en la pila, por lo que puede señalarlo. – nothrow
No hay ninguna razón para complicar las cosas: 'int * ptr_ptr_a = &ptr_a;' está bien. – karlphillip
por supuesto - tiene sentido después de haberlo señalado - muchas gracias – bph