Ich habe einige Code wie folgt:Array-Adresse in C++
int n;
cin >> n;
int array[n];
for (int i = 0; i < n; ++i) {
cin >> array[i];
}
int tmp[n - 1];
tmp[0] = 1;
Mit Eingang: 1 10
fand ich, dass der Wert von array[0]
geändert wurde, statt 10
es das gleiche hat mit tmp[0]
.
Dann erkannte ich mit diesem Eingang die Länge tmp[]
wurde Null. Also ich drucke die Adresse array[]
und tmp[]
mit:
printf("%d\n %d\n", array, tmp);
und fanden sie die gleiche Adresse hatte.
Ich möchte herausfinden, was passiert, wenn ein Array eine Länge von 0 hat; so habe ich versucht, dies:
int array[1];
array[0] = 10;
int tmp[0];
tmp[0] = 1;
Adresse:
array[]: 1363909056
tmp[] : 1363909052
Es sieht genauso aus wie der vorherige Code (außer dem Eingangsteil). Aber tmp[0]
und array[0]
hat andere Werte und Adresse jetzt.
Und ich bin wirklich verwirrt, dass tmp
hat kleinere Adresse dann array
.
Also meine Frage ist:
- Was passiert, wenn ich ein Array mit der Länge Null erklären?
- Warum funktionieren diese beiden Codes anders? (sie sehen gleich aus :))
'int array [n];' ist nicht standard C++. –
Ich habe viel mit verschiedenen 'Deklarationen' versucht, aber es macht nur mehr verwirrt – mzhty
'tmp [0] = 1;' ruft einfach undefiniertes Verhalten auf. Nicht wirklich würdig, an ein Ergebnis zu denken, auf das von 'tmp [0] 'danach zugegriffen wird. –