Cuando hablamos de desreferencia, ¿es necesario que se use *
? Si se accede a la referente del puntero de alguna otra manera, ¿se puede considerar como la eliminación de referencias puntero o no, como:¿Por qué printf ("% s", ptr) puede desreferenciar un vacío *?
char *ptr = "abc" ;
printf("%c" , *ptr); // Here pointer is dereferenced.
printf("%s" , ptr); // What about this one?
Esa es la primera parte de mi pregunta.
Ahora, si printf("%s" , ptr)
es un ejemplo de desreferenciación, responda amablemente la siguiente parte de mi pregunta también.
K & R dice
a "pointer to void" is used to hold any type of pointer but cannot be dereferenced itself
Por lo tanto,
char a = 'c' ;
char *p = &a ;
void *k = &a;
printf("\n%c\n" , *p);
printf("\n%c\n" , *k);
no compila, compilador da error
In function ‘main’: warning: dereferencing ‘void *’ pointer error: invalid use of void expression
Pero si usamos
char *a = "c" ;
char *p = a ;
void *k = a;
printf("\n%c\n" , *p);
printf("\n%s\n" , k);
Compila y funciona. Lo que significa que el puntero void puede ser desreferenciado - tenemos el puntero del objeto al que se refiere.
Si ese es el caso, entonces, ¿qué significa K & R cita arriba en este contexto?
Gracias por su tiempo.
No veo dónde está desreferenciando 'void * 'con éxito. Por favor vuelve a leer tu código. – leppie