mikrocontroller.net

Forum: Compiler & IDEs C: Struct, Pointer und Arrays


Autor: Jakob Keres (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe hier eine simple, dumme C-Frage, die sich mit etwas Nachdenken
eigentlich lösen lassen sollte, aber ich komme gerade nicht drauf :(

Ich habe ein Array von Structs:

struct test{
    char* name; // Bezeichnung des Tests
  int id;      // ID des Tests
  int res;    // Testergebnis
};

struct test tests[NO_TESTS];

Jetzt soll das Array an ein Unterprogramm übergeben werden.
printTestScreen(tests);

Wobei die Signatur wie folgt aussieht:
void printTestScreen(struct tests test[]);

D.h. doch ich übergebe einen Zeiger auf das erste Feld eines Arrays von
Structs. Mit test[i].id sollte ich dann in der Funktion doch auf die
Structs zugreifen können, aber irgendwie will das gar nicht
kompilieren.

Was ist daran falsch?
Grüße
Jakob

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was ist daran falsch?

Du zeigst weder den exakten Code noch die exakte Fehlermeldung.

Im Prinzip hast du recht: Genau so wirds gemacht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
struct test {
  ....

void printTestScreen(struct tests test[]);

Ich werte das mal als Schreibfehler beim posten im Forum:
Deine Struktur heist 'test', nicht 'tests'.

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist C++ und kein C.

void printTestScreen(struct tests *test);  /* C */

Autor: Jakob Keres (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich werte das mal als Schreibfehler beim posten im Forum:
>Deine Struktur heist 'test', nicht 'tests'.

Danke, das war der Fehler!

Viele Grüße

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll daran C++ sein?

Autor: Daniel aka Khani (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ein kleiner Tip am Rande : Mit typedef sieht das schöner aus (meiner
Meinung nach).

typedef struct {
  char *pcBla;
  int   iBlubb;
} test;

und dann :
#define ANZAHL 12

test variable[ANZAHL];

und weiterhin
void vPrintToScreen(test* pxVar);

Nur so meiner Meinung nach. Meinungen sind verschieden (was auch meine
Notation angeht, die hier nicht zur Diskussion steht ;-)).

MfG, Daniel.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das ist C++ und kein C.

Wie kommst du auf das schmale Brett?

> void printTestScreen(struct tests *test);  /* C */

Das geht auch und ist zu ca. 100% äquivalent, sowohl in C als auch in
C++.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.