Erste Schritte mit C
-
CStoll schrieb:
(allerdings zeigt a ins Nirvana und k bekommt einen willkürlichen Wert*).
je nachdem wo die variablen angelegt wurden, können auch beide 0 sein. der begriff 'nirvana' steht hier für die tatsache, dass k unvorhersehbar irgendwo hin zeigen wird.
-
fussnoten-freak schrieb:
CStoll schrieb:
(allerdings zeigt a ins Nirvana und k bekommt einen willkürlichen Wert*).
je nachdem wo die variablen angelegt wurden, können auch beide 0 sein. der begriff 'nirvana' steht hier für die tatsache, dass k unvorhersehbar irgendwo hin zeigen wird.
Ups, ich wußte, ich hab was vergessen. (aber k ist kein Zeiger und zeigt deshalb nirgendwohin)
OK, dann die korrekte Fußnote:
Wenn die Variablen lokal sind, werden sie nicht (bzw. mit willkürlichen Werten) initialisiert, globale und statische Variablen werden mit 0 initialisiert.
-
CStoll schrieb:
(aber k ist kein Zeiger und zeigt deshalb nirgendwohin)
ach, 'tschuldigung. ich meinte 'a'
-
Jaaaah, soweit schonmal vielen Dank für die Antwort.
Also ... ganz hab ichs noch nciht kapiert.Deswegen nochmal zu 1.:
Also Zeiger auf int heisst, wenn ich für k einen Wert hätte, dann würde a auf den betreffenden Speicherplatz zeigen - richtig? Und k bekommt einen willkürlichen Wert? Also bei mir bekommt k den Wert: "2293640" - das sieht verdächtig nach einem Speicherplatz und nicht nach einem willkürlichen Interger Wert aus - find ich zumindest.
-
kallemalle schrieb:
1.:
Also Zeiger auf int heisst, wenn ich für k einen Wert hätte, dann würde a auf den betreffenden Speicherplatz zeigen - richtig?k und a haben nur eine gemeinsamkeit, nämlich das 'int'. ansonsten sind sie unabhängig. a ist ein zeiger auf 'int' und k ein einfacher 'int'. a muss nicht auf k zeigen, kann aber...
-
So, wie sie dort stehen, haben die beiden Variablen gar nichts miteinander zu tun. Wenn du willst, daß a auf den Speicherplatz von k zeigt, mußt du deine Variablen passend initialisieren:
int k = 0x0815, *a = &k;//jetzt hast du definierte Werte dort stehen
Und "willkürlicher Wert" kann irgendwas bedeuten - eventuell füllt der Compiler die Variablen mit einem bestimmten Bit-Muster, oder die Variable interpretiert die Daten, die vor dem Funktionsstart an der betroffenen Speicherstelle standen, passend um.
(PS: 2293640 == 0x0022FF88 - das sieht eher nach einem Dummy-Muster aus)
-
Hallo kallemalle,
ich empfehle dir, ein Einsteiger-Buch für C zu kaufen und dieses
erst einmal durchzuarbeiten, bevor du anfängst zu programmieren.Gruß mcr
-
sooo ...vielen dank für den tipp mcr ... da wär ich ncih drauf gekommen dazu was zu lesen
also zeiger auf int heisst also sowas wie. es verweist auf ein interger. wenn ich aber nicht definiert habe wodrauf dieser zeiger zeigen soll dann zeigt er ist "nirvana" also ins nix und bekommt den wert 0.
in dem skript meines professors steht außerdem, dass man auch *a = k und auch k = *a schreiben kann ... da bekomme ich aber fehlermeldungen ... kann es sein das dies nur bie c funktioniert und nichtmehr bei c++???
-
Wenn du eine Anweisung wie
k = *a
machst, dann weist du der int-Variablen k den Wert der Speicherzelle zu, auf die der int-Zeiger a verweist!
Grüße
-
kallemalle schrieb:
in dem skript meines professors steht außerdem, dass man auch *a = k und auch k = *a schreiben kann ... da bekomme ich aber fehlermeldungen ... kann es sein das dies nur bie c funktioniert und nichtmehr bei c++???
wenn a ein zeiger ist (z.b. auf int), und k eine variable (kompatibler typ, also hier int), dann sollte es gehen. in c++ kann's dir natürlich passieren, dass der *-operator überladen wurde und dann kann man für nix mehr garantieren.
-
hmmmmm...
also wenn ich in eine komplett neue datei *k = a schreibe, dann bekomme darufhin beim kompilieren eine fehlermeldung diese klasse betreffend. Wieso?
ich denke das ist so prinzipiell möglich???
-
wenn du hast:
int k,*a;
kannst du natürlich nicht schreiben
*k = a
unter anderem weil k kein pointer ist, sondern a ist der pointer. wenn du aber schreibst:
k = *a
funktioniert es. hierbei kommt in die variable k das, worauf a zeigt, oder
*a = k
hierbei kommt in die speicherzelle auf die a zeigt der wert von k.
wie sinnvoll das sein mag, sei mal dahingestellt. aber ein c-compiler sollte sich nicht beschweren.