"Einfaches" Zeigerproblem, die zweite
-
Hallo zusammen,
erstmal entschuldigung, das ich das ganze hier jetzt nochmal poste, aber gestenr hab ichs ausversehen im c++ teil dieses forums gepostet.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-165107.html
habe da ein Anfänger Zeiger Problem. Und zwar habe ich folgende Funktion:
BOOL susb_getNextCommand( struct sCoLaCommandQueue* cQueue, struct sCoLaCommand CoLaCommand ) { CoLaCommand = cQueue->commands[1]; return TRUE; }
Die beiden Typen oben habe ich so definiert:
struct sCoLaCommand { BYTE command[COLA_MAX_PACKET_SIZE]; BOOL EOC; // EndOfCommand unsigned int position; unsigned int size; }; struct sCoLaCommandQueue { struct sCoLaCommand commands[USB_BUFFERED_COLA_COMMANDS]; unsigned int current; unsigned int usedCommands; };
und aufgerufen wird die funktion so:
struct sCoLaCommand inputCoLaCommand; struct sCoLaCommandQueue inputCoLaCommandQueue; ... susb_getNextCommand ( &inputCoLaCommandQueue, inputCoLaCommand );
eigentlich will ich nur, dass das command, der inputCoLaCommandQueue in inputCoLaCommand reinkopiert wird. aber leider macht er das nicht. Funktionsintern macht er genau dass was ich will, aber extern nicht. wo hab ich schon wieder meinen denkfehler?
grüße markus
-
C übergibt Parameter per Value. Dadurch ist der Parameter CoLaCommand nur eine Kopie deiner Variablen inputCoLaCommand - und die in der Funktion gemachten Änderungen wirken sich nicht nach außen auf. Zur Lösung mußt du den Parameter als Zeiger übergeben (in C++ ginge auch die 'drüben' erwähnte Referenz):
BOOL susb_getNextCommand( struct sCoLaCommandQueue* cQueue, struct sCoLaCommand* CoLaCommand ) { *CoLaCommand = cQueue->commands[1]; return TRUE; } ... susb_getNextCommand ( &inputCoLaCommandQueue, &inputCoLaCommand );
PS: Du hast nicht zufällig etwas mit Coca CoLa zu tun
-
Hehe, ne CoLa ist ein Co(mand)La(nguage) Protokoll zur Ansteuerung von Messgeräten. Werde das gleich mal ausprobieren. Kennst du denn ein gutes Tutorial für Zeiger? Ich hab da echt das Gefühl, dass ich oft auf dem Schlach stehe.