Zeiger auf Struktur im Kernighan/Ritchie

Gast #1335005
Hallo,

ich hab in der zweiten deutschen Ausgabe des Kernighan/Ritchie 
"Programmieren in C" etwas gefunden, dass ich nicht nachvollziehen kann. 
Für diejenigen die diese B uch auch haben gebe ich die Quellenangabe mit 
an.

zum Einen steht dort
[6.2 Strukturen und Funktionen, Seite 126]
1
struct point origin, *pp
2
pp = &origin;

zum Anderen steht dort
[6.2 Strukturen und Funktionen, Seite 127]
1
struct rect r,*rp=r;

Es soll jeweils eine Struktur und ein Zeiger auf die selbe Struktur 
definiert werden und danach der Zeiger mit der Sruktur initialisiert 
werden.
Das erste Bsp. kann ich nachvollziehen, da wird die Adresse der Struktur 
in den Zeiger geladen.

Wird beim zweiten Bsp. auch die Adresse der Structur in den Zeiger 
geladen? Wenn ja, würde es ja bedeuten dass folgende Zuweisungen das 
identische machen,
1
pp = origin;
2
pp = &origin;

UND DASS KANN KANN ICH MIR NICHT VORSTELLEN!
Persönliche Seite
(Nur meinen Meinung)

orgin und pp stehen nach der Zuweisung auf der selber Adresse, was du in 
einem änderst siehst du im anderen (& steht ja für die Adresse)

r und rp haben "nur" den selben Inhalt (also ein Kopie), stehen also auf 
unterschiedlichen Adressen (* steht ja für den Inhalt)

Aber ich meine C kann nicht einfach so structs kopieren...
mikes schrieb:
> Hallo,
> ...
> zum Einen steht dort
> [6.2 Strukturen und Funktionen, Seite 126]
>
1
> struct point origin, *pp
2
> pp = &origin;
3
>

Hier fehlt ein Semikolon, aber egal.

>
> zum Anderen steht dort
> [6.2 Strukturen und Funktionen, Seite 127]
>
1
> struct rect r,*rp=r;
2
>


Das ist schlicht und ergreifend falsch.
Es müsste &r heißen.


> ...
> Wird beim zweiten Bsp. auch die Adresse der Structur in den Zeiger
> geladen? Wenn ja, würde es ja bedeuten dass folgende Zuweisungen das
> identische machen,
>
1
> pp = origin;
2
> pp = &origin;
3
>
>
> UND DASS KANN KANN ICH MIR NICHT VORSTELLEN!

Ich mir auch nicht, der gcc ebenfalls nicht und K&R inzwischen wohl
auch nicht mehr.
... ... schrieb:
> (Nur meinen Meinung)
>
> orgin und pp stehen nach der Zuweisung auf der selber Adresse, was du in
> einem änderst siehst du im anderen (& steht ja für die Adresse)

falsch.
Es sind zwei Variablen, die jeweils an einer anderen Stelle stehen.

>
> r und rp haben "nur" den selben Inhalt (also ein Kopie), stehen also auf
> unterschiedlichen Adressen (* steht ja für den Inhalt)

falsch.
'*' steht für Zeiger in einer Deklaration.

>
> Aber ich meine C kann nicht einfach so structs kopieren...

falsch.
C kann prima structs kopieren.
Gast
1
struct S {
2
  int a;
3
  char b;
4
};
5

6
int main() {
7
  struct S s1, *s2 = s1;
8

9
  return 0;
10
}
1
haku@haku-laptop[~/test] $ gcc -c test.c
2
test.c: In Funktion »main«:
3
test.c:8: Fehler: inkompatible Typen in Initialisierung
Gast
>Hier fehlt ein Semikolon, aber egal.
Ja, ja, man sagt mir nach ich bin ein Schussel. Aber zum Glück merkts 
der Compiler im Gegensatz zum Problem in der Frage.

>Das ist schlicht und ergreifend falsch.
>Es müsste &r heißen

genau das wollte ich hören, wollte aber nicht aus fundiertem Halbwissen 
heraus die "Bibel" in Frage stellen.

Danke.
Persönliche Seite
Klaus Wachtler schrieb:
> ... ... schrieb:
>> (Nur meinen Meinung)
>>
>> orgin und pp stehen nach der Zuweisung auf der selber Adresse, was du in
>> einem änderst siehst du im anderen (& steht ja für die Adresse)
>
> falsch.
> Es sind zwei Variablen, die jeweils an einer anderen Stelle stehen.

Ich glaub wir meine das selbe...

Ich meinte damit das beide Var. den gleichen Inhalt haben oder ist das 
nicht so?

http://de.wikibooks.org/wiki/C-Programmierung:_Zeiger
Variablen sind origin und pp.
Die haben aber nicht den gleichen Inhalt.
origin und *pp haben den gleichen Inhalt, aber *pp ist keine
Variable, sondern ein Ausdruck.

Vielleicht pingelig, aber alles andere hilft hier nicht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.