C , Error: Expression must be a modifiable lvalue
ich habe den folgenden code:
#define NULL ((void*)0)
void* Globalptr = NULL;
void func(ptrtype* input)
{
((ptrtype*)Globalptr) = input;
}
Bekomme ich Error on line ((ptrtype*)Globalptr) = input;
sagt: "Ausdruck muss einen veränderbaren lvalue"
Warum brauchen Sie ein #define für NULL? Typ-casting getan werden muss, um Werte, um fit in den Variablen.
NULL
sollte in gebracht werden, einschließlich stdlib.h
oder eine der anderen Spaltenüberschriften, dass es definiert; nicht ihn selbst schreiben zu müssen.InformationsquelleAutor Islam Wahdan | 2014-10-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die Daten entsprechend der variable (lvalue), nicht ändern, den Typ der Variablen entsprechen den Daten:
Aber da kann man konvertieren Sie beliebige Daten Zeiger auf
void*
in C, können Sie einfach tun:InformationsquelleAutor user694733
Bei der Verwendung von void-Zeiger, den Typ cast wie
Und nicht wie
Globalptr = (ptrtype *)input;
macht keinen Sinn, in diesem Fall, da es bereits ptrtype*InformationsquelleAutor Chinna
Bitte stellen Sie sicher, Sie sollte include-header-Datei stdlib.h zu bringen in NULL und auch nicht erstellen-NULL-auf Ihre eigenen, wie Sie getan haben.
InformationsquelleAutor Gopi
Funktioniert das immer, was auch immer der Typ des Zeigers wird (innerhalb einer Funktion, wie Sie):
InformationsquelleAutor
Es hätte Sinn gemacht, wenn GlobalPtr war der Typ "ptrtype *" und Eingang " der Typ "void *" wie folgt:
In Ihrem Fall, was Sie tun können, ist zu konvertieren Globalptr von "void *" in "ptrtype *".
Wie andere bereits erwähnten, "NULL" sollten nicht in dieser Weise verwendet werden.
InformationsquelleAutor Arjun Mathew Dan
Das eigentliche Problem hier ist, dass die Besetzung erzeugt eine rvalue und der linken Operanden des zuweisungsoperators erfordert eine modifiable lvalue.
Deshalb ist der Ausdruck ((ptrtype*)Globalptr) nicht richtig ist und wie andere darauf hingewiesen, Besetzung erfolgt auf der rechten Seite des zuweisungsoperators.
finden Sie die lvalue_rvalue_link für details.
InformationsquelleAutor bare_metal