Wenn wir über Dereferenzierung sprechen, ist es notwendig, dass *
darin verwendet wird? Wenn wir den referenten des Zeigers auf anderer Weise zugreifen, kann es als dereferencing einen Zeiger oder nicht in Betracht gezogen werden, wie:Warum kann printf ("% s", ptr) eine Lücke dereferenzieren *?
char *ptr = "abc" ;
printf("%c" , *ptr); // Here pointer is dereferenced.
printf("%s" , ptr); // What about this one?
, dass der erste Teil meiner Frage ist.
Wenn nun printf("%s" , ptr)
ein Beispiel für Dereferenzierung ist, dann bitte den folgenden Teil meiner Frage beantworten.
K & R sagt
a "pointer to void" is used to hold any type of pointer but cannot be dereferenced itself
Daher
char a = 'c' ;
char *p = &a ;
void *k = &a;
printf("\n%c\n" , *p);
printf("\n%c\n" , *k);
lässt sich nicht kompilieren, gibt complier Fehler
In function ‘main’: warning: dereferencing ‘void *’ pointer error: invalid use of void expression
Aber wenn wir verwenden
char *a = "c" ;
char *p = a ;
void *k = a;
printf("\n%c\n" , *p);
printf("\n%s\n" , k);
Es kompiliert und funktioniert. Was bedeutet, dass der Zeiger auf den Zeiger dereferenziert werden kann - wir haben den Objektzeiger, auf den er sich bezieht.
Wenn das der Fall ist, was bedeutet K & R oben genannten Zitat in diesem Zusammenhang?
Danke für Ihre Zeit.
Ich sehe nicht, wo Sie 'void *' erfolgreich dereferenzieren. Bitte lesen Sie Ihren Code erneut. – leppie