Hallo, habe folgendes Problem mit Strukturen. Habe zwei Strukturen angelegt mit je zwei einträgen. Danach je einer Variablen, eine Struktur zugeordnet. Im Programm dann Struktur1 Werte zu gewiesen und dann selbe mit Struktur2. Wenn ich mir nun die Werte in den Strukturen ansehe, kann ich sehen, das immer in beiden Strukturen die selben Werte stehen. Die Strukturen werden im Register auf den selben Speicherbereich abgebildet und nicht an verschiedenen Speicherbereichen im RAM. Hat da einer eine Lösung wo das Problem liegt? Danke Uwe
Du schreibst zwar, das a und b Zeiger auf jeweils eine der Strukturen sind, weist aber diesen Zeigern nichts zu. Also stehen sie auf ihrem initialisierungswert, der hier mal 0 ist. Beide zeigen also auf die Adresse 0. Dann ist klar, das die Zuweisungen an die Mitglieder von b die vorherigen Zuweisungen an a überschreiben.
Uwe schrieb: > Danach je einer Variablen, eine Struktur zugeordnet. Nö, hast du nicht. Du hast nur POinter Variablen angelegt. So ein Pointer kann auf einen Speicherbereich zeigen, in dem sich so eine Struktur befindet. Er KANN. Aber dazu musst du erst mal so eine Struktur im Speicher haben. Die hast du aber nicht. Ein Zettel auf dem steht "Das Buch ist im Bücherregal, Abschnitt A, 3. Buch von links" ist nicht dasselbe wie das Buch selber. Der Zettel ist der Pointer. In ihm ist vermerkt, wo das Buch zu finden ist. Aber er IST nicht selber das Buch.
Erst mal danke für die Antwort. Ja das ist war. Es darf kein Zeiger sein. Sollte dann so aussehen damit fester Speicherbereich zugeordnet wird. struct struct1 a; struct struct1 b; Aber wie muß die Syntax oder ein Zeiger aussehen, damit ich auf die Strukturelemente mit den Einträgen zu greifen kann. Wollte die Strukturen in ein Header-File packen und dieses dann im ganzen Programm nutzen können. Die Struktureinträge wollte ich dann über die Namen in der Struktur ansprechen. z.B. Struktur1...->a1 = 0x4 u.s.w.
Uwe schrieb: > Erst mal danke für die Antwort. > Ja das ist war. Es darf kein Zeiger sein. > > Sollte dann so aussehen damit fester Speicherbereich zugeordnet wird. > > struct struct1 a; > struct struct1 b; > > Aber wie muß die Syntax oder ein Zeiger aussehen, damit ich auf > die Strukturelemente mit den Einträgen zu greifen kann. Zunächst mal brauchst du da erst mal keinen Zeiger. a ist dein struct1 Objekt. Also ist a.a1 der erste Member dieses Objektes. Wenn du einen Pointer hättest struct struct1 * PointerZuStruct1; PointerZuStruct1 = &a; jetzt zeigt der Pointer auf a und damit auf das Strukturobjekt. PointerZuStruct1 +---------+ | o-------------------+ +---------+ | a | +------------+ +----->| a1: 5 | +------------+ | a2: 7 | +------------+ Der Zugriff würde dann so aussehen (*PointerZuStruct1).a1 also im Grunde wieder genau gleich. Du nimmst den Pointer PointerZuStruct1 dereferenzierst ihn (du verfolgst also im Bild den Pfeil) *PointerZuStruct1 was dich zum eigentlichen struct Objekt bringt (dem Kasten, über dem a steht) (Beachte: Jetzt bist du wieder beim Objekt selber, also der Struktur) und von dieser Struktur wieder der a1 Member (*PointerZuStruct1).a1 Aber: Da die Schreibweise mit dem * und der Klammerung ziemlich tippaufwändig ist, und man diese Zugriffsform oft braucht, hat man in C dafür eine Abkürzung erfunden PointerZuStruct1 -> a1 macht genau dasselbe, ist aber einfacher zu tippen. Insbesondere, wenn in der Struktur dann selber wieder ein Pointer sitzt, der zu einer anderen Struktur führt, etc. etc. > Wollte die Strukturen in ein Header-File packen und dieses dann im > ganzen Programm nutzen können. Ja kannst du auch. Funktioniert genau gleich, wie mit allen anderen globalen Variablen. Dazu braucht es aber erst mal keine Pointer. Vielleicht doch mal ein C-Buch konsultieren?
>Aber wie muß die Syntax oder ein Zeiger aussehen, damit ich auf >die Strukturelemente mit den Einträgen zu greifen kann. Nun, mit dem Operator "->" geht das durchaus, wenn Du einen Zeiger benutzt. Die andere Alternative ist der Operator ".", wenn Du keinen Zeiger benutzt. >Wollte die Strukturen in ein Header-File packen und dieses dann im >ganzen Programm nutzen können. Die Struktureinträge wollte ich dann über >die Namen in der Struktur ansprechen. Das eine hat mit dem anderen gar nichts zu tun. Was für Header-Dateien und dem Unterschied von Deklaration und Definition zusammenhängt gilt für Variablen aller Typen. Auch aber nicht nur für Variablen die ein struct als Typ haben. In einer Header-Datei wird höchstens ein "extern"-Verweis auf eine Variable eingetragen. Die eigentliche Definition erfolgt in einer der C-Dateien.
Guru schrieb: > Verd... Ist der wieder schnell heute abend. :-) Und dermaßen kompetent und geduldig. Respekt an der Stelle!
Hallo! Habe es mal den verschiedenen Zugriffsformen getestet. Läuft! Danke
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.