C-Frage (cast)

Gast #1534979
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
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
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
> 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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.