Forum: Compiler & IDEs Zeiger auf Struktur im Kernighan/Ritchie


von mikes (Gast)


Lesenswert?

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!

von ... .. (docean) Benutzerseite


Lesenswert?

(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...

von Klaus W. (mfgkw)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

... ... 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.

von Sven P. (Gast)


Lesenswert?

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

von mikes (Gast)


Lesenswert?

>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.

von ... .. (docean) Benutzerseite


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

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.

von Simon K. (simon) Benutzerseite


Lesenswert?

Sven P. schrieb:
>
1
> haku@haku-laptop[~/test] $ gcc -c test.c
2
> test.c: In Funktion »main«:
3
> test.c:8: Fehler: inkompatible Typen in Initialisierung
4
>

Hehe, deutsche Fehlermeldungen. Wirkt gerade irgendwie komisch auf mich 
;)

von Sven P. (Gast)


Lesenswert?

Tja, vorallem deutsch und lesbar und verständlich. Sag das mal dem 
Visual-C++-Compiler >_>

von Simon K. (simon) Benutzerseite


Lesenswert?

Sven P. schrieb:
> Tja, vorallem deutsch und lesbar und verständlich. Sag das mal dem
> Visual-C++-Compiler >_>

Sag ich ihm jedes mal. Hab ja selbst Visual C++ Express 2008...

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
Noch kein Account? Hier anmelden.