typedef struct {
unsigned char _RES_LCD:1;
unsigned char D_I:1;
unsigned char R_W:1;
unsigned char Ks0108E1:1;
unsigned char Ks0108E2:1;
}_LCDPORT;
in funktion1 füllen:
_LCDPORT LCD_CMD_PORT;
LCD_CMD_PORT.R_W = 1;
in funktion2 kopieren
_LCDPORT cmdPort;
cmdPort = LCD_CMD_PORT; //geht das kopieren des Inhalts auf diese Art
(ohne memcpy)?
Das geht nur mit memcpy(). Alternativ: _LCDPORT *cmdPort; cmdPort = &LCD_CMD_PORT; und dann zB mit cmdPort->R_W weitermachen. Kommt drauf an.
Natürlich geht das mit einfacher Zuweisung. Im Gegensatz zu Arrays können Strukturen vom gleichen Typ ohne Probleme einander zugewiesen werden. In C verhalten sich nur Arrays anders! Sie sind die Ausnahme. Manche sagen auch: der Bastard.
Joachim Drechsel schrieb: > Alternativ: > > _LCDPORT *cmdPort; > > cmdPort = &LCD_CMD_PORT; > > und dann zB mit cmdPort->R_W weitermachen. Kommt drauf an. Hat er es dann kopiert oder nur den Zeiger umgehängt? Ich würde es eher mit: *(&cmdPort) = *(&LCD_CMD_PORT); probieren.
Stefan schrieb: > Hat er es dann kopiert oder nur den Zeiger umgehängt? Ich würde es eher > mit: weder noch, er gibt nur jetzt einen Zeiger der auf LCD_CMD_PORT zeigt. Da wurde nicht kopiert oder umgehängt.
Karl Heinz Buchegger schrieb: > Natürlich geht das mit einfacher Zuweisung. Im Gegensatz zu Arrays > können Strukturen vom gleichen Typ ohne Probleme einander zugewiesen > werden. Wenn dem so ist, ist meine erste Antwort natürlich hinfällig.
Er hat kopiert. Das passt schon. Nur man muss vorsichtig sein, wenn in dem Struct Zeiger definiert sind. Dann werden natürlich nur die Zeiger kopiert, aber die zeigen immernoch auf diesselben Daten. gruß cyblord
Stefan schrieb: > > Hat er es dann kopiert oder nur den Zeiger umgehängt? Ich würde es eher > mit: > > *(&cmdPort) = *(&LCD_CMD_PORT); > > probieren. Wobei Joachim den Zeiger ins Spiel gebracht hat. Der TO wollte den gar nicht.
1 | _LCDPORT LCD_CMD_PORT; |
2 | LCD_CMD_PORT.R_W = 1; |
3 | |
4 | _LCDPORT cmdPort; |
5 | cmdPort = LCD_CMD_PORT; |
ist absolut perfekt und macht das Gewünschte.
cyblord ---- schrieb: > Nur man muss vorsichtig sein, wenn in dem Struct Zeiger definiert sind. > Dann werden natürlich nur die Zeiger kopiert, aber die zeigen immernoch > auf diesselben Daten. Guter Punkt, aber das wäre auch mit memcpy so, oder sehe ich das falsch?
Stefan schrieb: > Guter Punkt, aber das wäre auch mit memcpy so, oder sehe ich das falsch? intern macht er auch nur ein memcpy, da gibt es keinen unterschied.
Stefan schrieb: > cyblord ---- schrieb: >> Nur man muss vorsichtig sein, wenn in dem Struct Zeiger definiert sind. >> Dann werden natürlich nur die Zeiger kopiert, aber die zeigen immernoch >> auf diesselben Daten. > > Guter Punkt, aber das wäre auch mit memcpy so, oder sehe ich das falsch? Absolut richtig.
Karl Heinz Buchegger schrieb: > ist absolut perfekt und macht das Gewünschte. Nur aus Interesse: würde die von mir vorgeschlagene Lösung funktioneren?
Stefan schrieb: > Karl Heinz Buchegger schrieb: >> ist absolut perfekt und macht das Gewünschte. > > Nur aus Interesse: würde die von mir vorgeschlagene Lösung funktioneren? Ja klar, aber nur weil sich * und & aufheben. Man schreibt ja auch nicht if (!!a).
Stefan schrieb: > Karl Heinz Buchegger schrieb: >> ist absolut perfekt und macht das Gewünschte. > > Nur aus Interesse: würde die von mir vorgeschlagene Lösung funktioneren? Klar würde es. (Nicht böse gemeint) Es ist nur ein bischen "von hinten durch die Brust ins Auge". Erst einen Zeiger bilden, nur damit dann der Zeiger dereferenziert wird um an die Daten zu kommen. So was macht man nur dann, wenn sich zwischendurch der Datentyp ändern muss, weil man den Zeiger auf einen anderen Typ umcastet.
Karl Heinz Buchegger schrieb: > (Nicht böse gemeint) Es ist nur ein bischen "von hinten durch die Brust > ins Auge". Na ja, ich habe mir halt gedacht, daß es so "logisch" richtig sein müsste :-) Karl Heinz Buchegger schrieb: > Erst einen Zeiger bilden, nur damit dann der Zeiger dereferenziert wird > um an die Daten zu kommen. So was macht man nur dann, wenn sich > zwischendurch der Datentyp ändern muss, weil man den Zeiger auf einen > anderen Typ umcastet. Das leuchtet ein. Wieder was gelernt. Vielen Dank!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.