Geht schon, birrgt aber Gefahrenquellen.
Korrekt ist die Derefernezierung gem X.Y. Ist in jedem C-Buch erklärt.
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?
Geht schon, birrgt aber Gefahrenquellen.
Korrekt ist die Derefernezierung gem X.Y. Ist in jedem C-Buch erklärt.
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
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.
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
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
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
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.
Die Namen der Strukturkomponenten kennst du. Alles andere ist HACK.Zitat von chogle
im Header:
in der QuelleCode:// typedef of hurz_t typedef struct { short val1; short arr[8]; ... } hurz_t; // prototype for func void func (hurz_t *phurz);
Code Convention in C ist übrigens, Namen von definierte Strukturen eine Suffix "_t" zu verpassen. Pointern wird gerne ein "p" vorangestellt.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; ... }
Namen von Funktionen und Objekten werden komplett klein, Macros komplett groß geschrieben.
Disclaimer: none. Sue me.
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.
Lesezeichen