Es gibt eine Struktur mit ein paar Komponenten, einen Buffer, eine Funktion und einen Funktionsaufruf. struct tcom { unsigned long baud ; unsigned short bits ; } ; ... unsigned char buffer[0x100] ; ... unsigned short comm (struct tcom *b[16]) { ... b[7]->baud = 9600 ; ... } ... Wie muß der cast für buffer aussehen, wenn ich die Funktion aufrufe? i = comm ( ???buffer ) Was der Compiler nicht anmeckert ist comm ((void *)&buffer).
Erstelle dir ein Array aus struct tcom mit 16 Einträgen. Die Zeiger auf alle diese structs ebenfalls als Array will comm als Argument haben. Ein einfacher Cast nützt dir nix. MfG Marius
Karlheinz schrieb: > unsigned char buffer[0x100] ; Möchtest du buffer nicht als Array von tcom Strukturen deklarieren? tcon buffer[16]; > Wie muß der cast für buffer aussehen, wenn ich die Funktion aufrufe? > i = comm ( ???buffer ) Ein cast ist nicht nötig, wenn du die Variablen "richtig" definierst! i = comm( &buffer ); // Zeiger auf Array von tcon-Strukturen übergeben
Vielen Dank für eure raschen Antworten. Bei mir liegt wohl ein Verständnisproblem vor. Ws möchte ich: Einmal ein Array von 16 gleichen Strukturen. Die Elemente der Strukturen sind jeweils 16 Bytes lang. Und einmal möchte ich einen unsigned char Buffer[0x100] an eine Funktion übergeben, die diesen Buffer als Array mit 16 Strukturen beschreibt. Das Array ist also genaus so groß wie der Buffer.
Das klingt nach einer "union": http://de.wikibooks.org/wiki/C-Programmierung:_Komplexe_Datentypen#Unions In die Union packst du beide Deklarationen rein (Array von chars bzw. Array von tcom Typen) und verwendest dann den jeweiligen Array nach Belieben.
> Einmal ein Array von 16 gleichen Strukturen.
Du übergibst aber an die Funktion einen Zeiger auf einen Zeiger auf eine
Struktur, nicht einen Zeiger auf ein Array. Wenn du auf diese Weise
den Puffer in der Funktion nutzen willst, müßtest du erst ein Array aus
16 Zeigern erzeugen.
Man kann aber auch einen Zeiger auf ein Array aus 16 Strukturen
übergeben. Das würde dann so gehen:
1 | unsigned short comm (struct tcom (*b)[16]) |
2 | {
|
3 | b[7]->baud = 9600 ; |
4 | }
|
Dann kannst du deinen Puffer übergeben mit:
1 | comm((struct tcom(*)[16])buffer); |
@Markus Sieht nicht gerade einfach aus, aber ich denke, daß ich das gesucht habe. Vielen Dank noch einmal an alle.
Die Verwendung von "comm((struct tcom(*)[16])buffer);" führt zu einem Syntaxerror.
Folgender Code muß eigentlich fehlerfrei übersetzen, sonst ist der Compiler kaputt:
1 | struct tcom |
2 | {
|
3 | unsigned long baud ; |
4 | unsigned short bits ; |
5 | } ; |
6 | |
7 | unsigned char buffer[0x100] ; |
8 | |
9 | unsigned short comm (struct tcom (*b)[16]) |
10 | {
|
11 | b[7]->baud = 9600 ; |
12 | return 0; |
13 | }
|
14 | |
15 | int main() |
16 | {
|
17 | comm((struct tcom(*)[16])buffer); |
18 | return 0; |
19 | }
|
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.