Ich bin derzeit ein Buch über C-Zeiger und gibt es ein Beispiel in dem Buch zu lesen, die mich verwirrt:Speicher in C zugehörige Arithmetik Zeiger
Angenommen, wir haben: int arr_of_int[] = {5,10,15};
und wir setzen: int *add_of_arr = arr_of_int;
dann weiß ich, dass die „add_of_arr
“ Variable enthält die Adresse: arr_of_int[0];
und nehmen wir an, nur die Adresse „add_of_arr
“ ist 500.
Nun, wenn ich tun: „add_of_arr += 3;
“ dann die Adresse von "add_of_arr" ist jetzt 512? Das ist, was ich aus dem Buch bekomme, aber sollte die Adresse von "add_of_arr
" immernoch 500 sein und nur die Adresse, die von add_of_arr 512 sein wird? Was ich aus dem Buch bekomme ist, dass sich die Adresse von add_of_arr ändert. Das verwirrt mich. Ich denke, es ist ein Fehler, aber ich bin mir nicht sicher.
Danke!
geändert Warum sind Sie über die Adresse einer Pflege Adresse? Ja, das ist klar definiert, und ja, es gibt einige Fälle, in denen das sogar nützlich ist, aber Sie sind noch nicht da. Insbesondere scheinen Sie über 'int ** add_of_add_of_arr = & add_or_arr' zu sprechen, der 500 ist. – MSalters
Ich war verwirrt, warum" & add_of_arr "sich änderte und nicht" add_of_arr ", aber es sieht wie ein Tippfehler aus. –
Lesen Sie unsere Annahmen genau wie geschrieben, Sie haben Recht und das Buch ist falsch. Gut beobachtet! Vielleicht solltest du ein besseres, präziseres Buch bekommen. Nur so: ein 'int' ist nicht garantiert, 4 Bytes zu haben. Es kann eine beliebige Größe von 1 (!) Sein. Auch wenn die Adresse von 'addr' (bessere Namen verwenden!)' 500' ist, kann die Adresse von 'array' auch nicht' 500' sein, so dass der Wert nach dem Inkrementieren nicht '512' sein kann (angenommen: sizeof (int) == 4U')! – Olaf