explicar los punteros a la cuestión punteros

Soy nuevo en C e bash controlar los punteros. Me encontré con esta expresión

char *foo = *(char **)bar; 

¿Qué está pasando exactamente? Entiendo que * es puntero ** es puntero a puntero, pero realmente no entiendo lo que es la *(char **)bar

edición: vale la pena mencionar que la barra se declara como const void * bar

Tanto los principiantes como los expertos pueden beneficiarse de obtener los conceptos básicos realmente sólidos.

  • Una ” variable de tipo t” es una ubicación de almacenamiento que se puede utilizar para almacenar o recuperar un valor de tipo t.
  • Un ” puntero a t” es un valor .
  • La aplicación del operador de desreferenciación * a un “puntero a t” produce una “variable de tipo t”.

Entonces, ¿qué tenemos?

 void *bar = whatever; char *foo = *(char **)bar; 
  • bar es una variable de tipo “puntero a anular”.
  • foo es una variable de tipo “puntero a char”.
  • casting bar to char** lee la bar variable y obtiene un valor de tipo “puntero a anular”. Ese valor se convierte luego en un valor de tipo “puntero a puntero a char”.
  • Al quitar la referencia a ese valor se produce una variable de tipo “puntero a char”.
  • El valor de esa variable se recupera y el valor se asigna a la variable foo .

¿Tener sentido?

 *(char**)bar; 

Lanzar bar a un puntero a puntero a char y desreferencia, lo que resulta en un puntero a char (es decir, un char* ).

Recuerda que los punteros son meramente indireccionales. Cuando eliminas la referencia de un puntero, “sueltas una estrella”, es decir:

 char ***p = ...; p -> char*** *p -> char** **p -> char* ***p -> char 

No sé qué tipo de bar es sin el elenco, pero aquí va:

bar se convierte en un puntero a un puntero a un char .

El * antes de (char **) está “anulando la referencia” del valor a su derecha. En este caso, está devolviendo el puntero char * mantenido en el puntero de ubicación a por la bar .

El resultado de la “desreferenciación” es un char * puntero a un carácter, que se asigna a la variable foo del mismo tipo.