C-Frage (cast)

Gast #1534979
Lesenswert?

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).
Persönliche Seite #1534985
Lesenswert?

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
Gast #1534995
Lesenswert?

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.
Gast #1535034
Lesenswert?

> 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);
Gast #1535230
Lesenswert?

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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren