-         

Ergebnis 1 bis 10 von 10

Thema: struktur in C

  1. #1
    chogle
    Gast

    struktur in C

    Anzeige

    folgende Frage:

    Ich habe Variablen von versch. Variablentypen welche ich in eine Struktur abfüllen möchte. Von der Struktur weiss ich in welcher Reihenfolge welche Variablentypen kommen und welche grösse die haben (zb von den Arrays). Ich kenne aber die Namen nicht der einzelnen Variablen in der Struktur, habe nur den Pointer auf die Struktur.
    Ist die Adresse des Pointers die Gleiche wie die erste Variable in der Struktur? und wäre es dann möglech (angenommen die erste Variable in der Struktur wäre ein int) mit dem pointer + 4 (angenommen ein standart 32 bit prozessor) auf die zweite Variable zuzugreifen?

    Oder gibt es da in C eine andere Vorgehensweise/Syntax?

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von engineer
    Registriert seit
    24.01.2005
    Ort
    Raum Frankfurt
    Beiträge
    264
    Geht schon, birrgt aber Gefahrenquellen.

    Korrekt ist die Derefernezierung gem X.Y. Ist in jedem C-Buch erklärt.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    30
    Beiträge
    795
    Hallo,

    Ich hätte da eben auch mal eine Frage zu Strukturen.

    Ich arbeite momentan mir CAN und will eine Funktion für das Lesen des Empfangspuffers schreiben.

    Wie ich eine Struktur in eine Funktion übergebe weiß ich aus meinem Buch.

    Wie ich aber eine Struktur aus einer Funktion herausbekomme, konnte ich leider nicht herausfinden.

    Könntet Ihr mir da vielleicht ein wenig auf die Sprpünge helfen?
    Gruß,
    Franz

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Wie Engineer schon sagte, sowas tut man nicht
    Beispiel:
    Code:
    //  -------- Struktur -----------
    typedef struct {
        int      iInteger;
        char   bWtlbrnft[6];
     } MY_STRUC;
    
    //  -------- deklaration -----------
    static MY_STRUC sStruc;
    
    main()
    {
    //  -------- so greift der main hin  -----------
       sStruc.iInteger = 24;
       sStruc.bWtlbrnft[0] = 12;
       myfunc((MY_STRUC*)&sStruc);
    }
    //  -------- so greift die Funktion hin -----------
    void  myfunc(MY_STRUC* pPntr)
    {
       pPntr->iInteger = pPntr->bWtlbrnft[0];
    }
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    30
    Beiträge
    795
    Vielen Dank PicNick für deine Antwort.

    Aber wie Ihr schon gesagt habt werd ich es dann doch lieber mit "Zeigern" machen.

    Hat wohl was damit zu tun, dass alle Daten zuerst kopiert werden müssen, was sehr viel CPU-Zeit in Anspruch nimmt... ODER?
    Gruß,
    Franz

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    04.04.2005
    Ort
    Hamburg
    Alter
    29
    Beiträge
    826
    Also bei der Lösung die oben steht wird doch auch nur ein Zeiger an myfunc übergeben, es wird also die eigentlich struct Variable nicht kopiert.

    Andun
    www.subms.de
    Aktuell: Flaschcraft Funkboard - Informationssammlung

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    30
    Beiträge
    795
    Sorry, hab ich wohl nicht aufgenommen

    Aber warum sollte man dann sowas nicht verwenden?

    Ich muss zB. 3 Bytes und ein Array( bzw 8 weitere Bytes) aus einer Funktion holen

    Wenn ich Globale Variablen bzw. Arrays nutze dann kommt das aufs selbe raus wie mit den Strukturen?!?

    Was würdet Ihr mir denn empfehlen? Was ist am besten für die Laufzeit?

    Wär echt klasse, wenn Ihr mir da noch ein paar Tipps geben könntet.
    Gruß,
    Franz

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Wenn es wirklich arg Laufzeitkritisch ist würd ich verschiedene Versionen ausprobieren und ins generierte asm schauen, da siehst du was wirklich ab geht und erkennst den optimalen Code.
    Disclaimer: none. Sue me.

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801

    Re: struktur in C

    Zitat Zitat von chogle
    folgende Frage:
    Ich habe Variablen von versch. Variablentypen welche ich in eine Struktur abfüllen möchte. Von der Struktur weiss ich in welcher Reihenfolge welche Variablentypen kommen und welche grösse die haben (zb von den Arrays). Ich kenne aber die Namen nicht der einzelnen Variablen in der Struktur, habe nur den Pointer auf die Struktur.
    [...]
    Die Namen der Strukturkomponenten kennst du. Alles andere ist HACK.

    im Header:

    Code:
    // typedef of hurz_t
    typedef struct
    {
       short val1;
       short arr[8];
    ...
    } hurz_t;
    
    // prototype for func
    void func (hurz_t *phurz);
    in der Quelle
    Code:
    #include "header.h"
    hurz_t hurz1, hurz2, ...;
    
    //
    void foo()
    {
       // calling func()
       hurz1.val = 0;
       hurz2.arr[7] = 7;
       ...
       func (&hurz1);
       func (&hurz2);
       ...
    }
    
    // implementation of func()
    void func (hurz_t *phurz)
    {
       ...
       phurz->arr[2] = 0x1234;
       ...
    }
    Code Convention in C ist übrigens, Namen von definierte Strukturen eine Suffix "_t" zu verpassen. Pointern wird gerne ein "p" vorangestellt.
    Namen von Funktionen und Objekten werden komplett klein, Macros komplett groß geschrieben.
    Disclaimer: none. Sue me.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    Hamburg <-> Bremen
    Alter
    36
    Beiträge
    112
    Hi,
    kann da nur empfehlen mal einen Blick in di Application Notes von Atmel zu werfen, efficinter C Code für Atmels (http://www.atmel.com/dyn/resources/p...ts/doc1497.pdf).
    Da wird genau diese Problematik behandelt, und vor allem stehen da noch jede Menge andere Sachen drin die man wissen sollte.

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •