Frage zu Variable und zum RAM
-
Hallo,
ich lerne zurzeit c.
wie ich das verstanden habe, wird immer, wenn ich eine variable definiere/deklariere (was ist da der unterschied?) der wert der variable unter einer bestimmten adresse in dem RAM geschrieben.ich habe folgendes programm geschrieben:
#include <stdio.h> int main() { int zahl; zahl=1; printf("%p", &zahl); return 0; }
das program definiert/deklariert den int zahl und weist ihm den wert 1 zu.
danach soll die speicheradresse vom RAM ausgegeben werden. das funktioniert auch alles ganz gut.
mir ist allerdings folgendes aufgefallen:
unter win wird ständig dasselbe ausgegeben! egal, ob ich das programm nur neu starte oder es gleich neu kompiliere, immer wird die selbe adresse ausgegeben:
"0022FF4C"
unter linux habe ich das auch ausprobiert, und da kommt immer was anderes, wenn ich das programm neu starte.
jetzt wollte ich mal fragen, ob da bei euch auch 0022FF4C ausgegeben wird, und warum das so ist.mfg
-
Linux betreibt da wohl ASLR, und dein Windows noch nicht. Hast du noch Windows XP? Wenn ich das richtig im Kopf habe, kann Windows das ab Vista.
-
ja, ich nutze xp.
vielen dank für antwort.
was ist jetzt der unterschied zwischen definieren/deklarieren?
-
Beim definieren wird der Speicherplatz belegt.
Beim deklarieren erhält der Compiler die Information, dass es die Variable/Funktion gibt (wie sie heißt und von welchem Typ sie ist).Das brauchst du, wenn du auf Variablen aus verschiedenen Quelldateien aus zugreifen willst.
Die Variable wird in einer Datei definiert, in den anderen deklariert.
-
ok, vielen dank für die antwort.
ich weiß zwar, dass das hier eigentlich nicht reingehört, aber ich hab da noch eine frage, für die es sich nicht lohnt, eine neue diskussion aufzumachen:
ich such ein gutes c-anfängerbuch.
was haltet ihr von "C: Programmieren von Anfang an"?
-
Nichts. Ist Schrott.
-
warum?
welches buch würdest du mir empfehlen?
-