Dieser Code:
int p = 10;
void *q;
*q = 10;
Lässt sich nicht kompilieren:
'=' : kann nicht von 'int' nach 'void *' konvertieren
Dieser Code lässt sich jedoch problemlos kompilieren:
int p = 10;
void *q;
q = &p;
Was ist der Grund dafür?
Dieser Code:
int p = 10;
void *q;
*q = 10;
Lässt sich nicht kompilieren:
'=' : kann nicht von 'int' nach 'void *' konvertieren
Dieser Code lässt sich jedoch problemlos kompilieren:
int p = 10;
void *q;
q = &p;
Was ist der Grund dafür?
Sie können einen void-Zeiger nicht dereferenzieren. Und selbst wenn Sie es könnten, würde Ihr Code in eine zufällige Speicheradresse schreiben und wahrscheinlich abstürzen.
Im zweiten Codeblock weisen Sie die Adresse des Zeigers zu, was gut funktioniert, da Sie jede beliebige Speicheradresse einem Zeiger zuweisen können. void*
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Fehler. Welcher Fehler? (In diesem Fall ist es ein bisschen offensichtlich, aber Sie sollten immer den Fehler angeben).
0 Stimmen
'=' : kann nicht von 'int' nach 'void *' konvertieren
0 Stimmen
Ihr Compiler ist seltsam ... was würde er konvertieren wollen von
int
avoid*
angesichts der Aussage*q=10;
? ??? In dieser Erklärung wird die10
hat Typint
und die*q
hat Typvoid
.3 Stimmen
In Ihrem ersten Schnipsel sagen Sie dem Compiler: "q ist ein Zeiger auf eine Art von Daten. Ich sage Ihnen nicht, um welche Art von Daten es sich handelt, denn ich verspreche, dass Sie das nicht wissen müssen." Dann sagen Sie dem Compiler: "Konvertiere 10 in den Datentyp, der sich an der Stelle befindet, auf die q zeigt, und speichere es dort." Da Sie ihm vorher keine Informationen über den Typ gegeben haben, kann er das nicht tun.