Zeiger
-
Hallo,
könnt ihr mir verraten warum an der im Quellcode markierten Stelle 0 ausgegeben wird?
#include <iostream> using namespace std; int main() { int arr[10] = {8, 6, 1, 2, 3, 5, 10, 17}, *parr; parr = arr; cout << *(parr + 3) << endl; // 2 cout << *parr + 5 << endl; // 13 parr++; cout << *parr << endl; // 6 parr += 4; cout << *parr << endl; // 5 cout << parr[4] << endl; // 0 (warum wird hier 0 ausgegeben?) char dummy; cin >> dummy; return 0; }
-
Du hast ganz einfach nur 8 Elemente initialisiert! Du zeigst mit parr aber auf das 10. Element. Also noch zwei weitere Zahlen dazu, dann gehts.
Nebenbei : Du kannst auch die Anzahl der Elemente weglassen
int arr[] = {8, 6, 1, 2, 3, 5, 10, 17};Sersn,
Nalas
-
genau du musst beachten ,
das parr nach parr++ und parr += 4 nicht mehr auf das erste element im array
weisst und du dann durch parr[4] quasi auf das 10. element zugreifst,
da das aber nicht definiert ist bekommst du hier auch ein undefiniertes
ergebnis.
-
es ist nicht undefiniert:
nach den inkrements gilt ja
parr == arr[5]und daher
parr[4] == arr[9]und da arr die Länge 10 hat, ist arr[9] durchaus definiert und ein int.
Allerdings werden bei der Initialisierung mit einer zu kurzen Liste die verbleibenden Variablen mit 0 intitialisiert. Deswegen hat das den gleichen Effekt, als häätest du folgendes gesagt:int arr[10] = {8, 6, 1, 2, 3, 5, 10, 17, 0, 0}; //die nullen sind optional!