NAS

C Zeiger

Steeef

Ensign
Registriert
Juli 2010
Beiträge
184
Hallo zusammen,

ich habe eine Frage zu Zeigern:

Ich habe folgende Aufgabe bekommen, ich soll die folgenden Anweisungen auf richtige Syntax testen:

Code:
globale Definitionen: 

int x = 17;
int *p1, p2;
char *p3, p4;

a) p1 = x;  ==> korrekt, da gleicher Datentyp
b) p1 = &x; ==> korrekt, da gleicher Datentyp; Variable erhält einfach nur einen Adresswert
c) *p1 = x+1; ==> korrekt, der Zeiger erhält einfach nur einen Wert
d) *p1 = &x; ==> korrekt, Zeiger erhält einfach nur einen Adresswert
e) p1 = p2; ==> korrekt, geht da gleiche Datentypen
f) p3 = &p4; ==> korrekt, Variable erhält Zeigerwert
g) p1 = p3; ==> nicht korrekt, unterschiedliche Datentypen
h) p4 = *p1; ==> nicht korrekt, unterschiedliche Datentypen

Sind meine Überlegungen soweit richtig?
Bei den richtigen Ausdrücken soll ich noch die entsprechenden Werte der linken sowie der rechten Seite angeben:

Code:
a) p1 = 17;
b) 17 = irgendeineAdresse
c) *p1=18;
d) 18 = irgendeineAdresse
e) 17 = p2;
f) p3 = irgendeine Adresse


Wäre nett wenn mal jemand drüber schauen könnte. Kritik ist durchaus erwünscht!

Danke und Gruß
 
kleiner tip: schreib dir doch ein kurzes c-programm, bei dem du nach jeder zeile die zu ändernde zahl ausgibst. die sachen, die compiler-fehler werfen, kommentierst du aus, bei allen anderen siehst du ja falsche werte ;)
 
Hey,
du kannst dich zum Teil selbst überprüfen indem du mal einen Compiler drüber laufen lässt. Ich denke mal, dass er an ein paar Stellen meckern wird, die du für gut befunden hast.

Grüße
 
Ich glaube da liegt ein generelles Verständnisproblem vor. Zeiger werden zwar als "Zahlen" gespeichert aber sind deswegen noch keine integer. Zeiger sind ein "eigener Typ".
 
Danke erstmal für die Antworten werde mich morgen Abend nochmals hier melden und die Anweisungen in Visual Studio rein tippen.
 
Vorsicht Falle: Der Stern ist rechtsassoziativ - er bezieht sich nur auf die Variable, vor der er steht, nicht auf alle in derselben Deklaration. Das heißt, dass

Code:
int *p1, p2;

das gleiche ist wie

Code:
int *p1;
int p2;
 
Zurück
Oben