Funktionen und Struktuten die 2te



  • Hallo, ich habe weiter unten schon aml gepostet, das klappt aber nicht und deshalb schreibe ich einen neuen Thread, denn ich brauche schnell HIlfe.

    Also:

    /*
    Hallo, mich quält da ein fieses Problem:

    Ich möchte gerne ein array von strukturen an eine Unterfunktion übergeben, ohne das ich dieses Array global definiere.

    Nochmal in C-Schrift:

    typedef struct {
    char vorname[16];
    char name[16];
    float gehalt;
    } record;

    record mitarbeiter[1024];

    und diese mitarbeiter[1024] würde ich gerne an eine Unterfunktion übergeben und damit bearbeiten, weiss aber echt nicht wie das geht.

    Vielen Dank schon mal im v******.
    */

    Das ist mein Problem. Die Antwort vom virtuellen Realsticer:
    /*
    void GibRecordAus(record *Record, int RecArraySize)
    {
    for(int i = 0; i < RecArraySize; ++i)
    printf("%s %s %f\n", Record[i].vorname, Record[i].name, Record[i].gehalt);
    }
    */

    ist zwar ganz gut, klappt aber nicht. Die Übergabe ist mit den falschen Parametern. Wenn ich das ändere in "struct record *Record" bringts das auch nicht.

    HILFEEE!!!!



  • Was meinst Du mit "ist ganz gut, klappt aber nicht. Die Übergabe ist mit den falschen Paramtern"? Das sollte nämlich eigentlich so funktionieren.



  • Also, mein Compiler meckert wenn ich ihm als Typen des Zeigers "record" angebe.
    Ich denke einfach mal, das das der Fehler ist. Wenn ich versuche das ganze mit "struct record" oder nur mit "struct" zu machen, meckert er auch.
    Das ist mein Problem. Hoffe ich habe das jetzt verständlich rübergebracht.



  • Ich nochmal. Habe nochmal getestet.
    Die antwort vom virtuellen realisticer stimmt dann, wenn ich die Struktur global definiere. Dann nimmt der compiler auch den Zeiger des Typs record bei der Übergabe an.
    Aber das mit der globalen definierung will ich vermeiden.



  • Meinst Du mit Definition den Programmteil mit typedef struct {...}? Wenn ja, dann kann das natürlich nicht funktionieren. Denn wenn Du die Deklaration (so heisst das glaube ich) lokal machst, wie soll sie dann an anderen Stellen im Programm, z.B. in einer anderen Funktion, was ja Dein Problem ist, bekannt sein?
    Warum willst Du das überhaupt vermeiden?



  • Genau das ist mein Problem. Es ist eine Aufgabe für die Fachhochschule und unser Professor hat verboten, die struktur global zu definieren.
    Er meinte das muss mit einem Zeiger auf die Struktur gehen.



  • Ich denke, da liegt ein "begriffliches" Missverständnis vor.
    Wenn Du dem Computer eine Struktur bekannt machst, dann ist das eine Deklaration.
    Wenn Du eine Variable eines bestimmten Typs erstellst, ist das eine Definition.

    Variablen sollte man generell nicht global definieren - das verbietet Dir die Aufgabenstellung ja auch.
    Um Variablen trotzdem in mehreren Funktionen nutzen zu können, musst Du Zeiger verwenden. Das hat virtuell realisticer auch bereits in seinem Beispiel getan.

    Die Deklaration muss hingegen global sein, wenn sie überall verfügbar sein soll. Wie gesagt, woher soll der Compiler an irgendeiner anderen Stelle im Programm wissen, was für ein Datentyp das sein soll, wenn die Deklaration lokal war?



  • Um es nochmal vereinfacht auszudrücken:

    Deklaration der Struktur (Datentyp) (-> darf und sollte global sein)

    typedef struct 
    {
       char vorname[16];
       char name[16];
       float gehalt;
    } record;
    

    Deklaration und Definition einer Variablen (-> sollte lokal sein; in deinem Fall darf sie nur)

    record mitarbeiter = { "Hans", "Meier", 2000};
    


  • Das klingt schlüssig und logisch.
    Ich danke euch für die schnelle und gute Hilfe.


Anmelden zum Antworten