Inhalt einer Array Variablen = ihre eigene Adresse ?!
-
Hallo liebe C++ - Gemeinde .
Ich habe gerade eine kleines Verständnisproblem ..
Warum ist der Inhalt der Array-Variablen ihre eigene Adresse .
Ich dachte bis heute ein Array
sei einfach nur ein Pointer auf sein erstes Element ?Code :
#include <iostream> int main (int argc, char * const argv[]) { std::cout << "Hello, World!\n"; int element[8] = { 1, 2, 4, 8, 16, 32, 64, 128 }; int *ptr; ptr = element; printf("element = %p\n", element); printf("*element = %i\n", *element); printf("&element = %p\n\n", &element); printf("ptr = %p\n", ptr); printf("*ptr = %i\n", *ptr); printf("&ptr = %p\n\n", &ptr); return 0; }Ausgabe :
Hello, World! element = 0xbffff6cc *element = 1 &element = 0xbffff6cc ptr = 0xbffff6cc *ptr = 1 &ptr = 0xbffff6ec
-
Ein Array ist ein Array und kein Pointer. Aber Arrays können implizit (also automatisch) in einen Pointer konvertiert werden.
-
Eine Variable von Array-Typ verhält sich wie ein Zeiger auf das erste Element, AUSSER es ist einer von 3 Fällen:
* Es wird der sizeof-Operator auf die Variable angewendet.
* Es wird der unäre &-Operator auf die Variable angewendet.
* Irgendwas mit der Initialisierung von String-Literalen.Du hast gerade Ausnahme Nummer 2 erwischt.
-
-
SG1 schrieb:
Eine Variable von Array-Typ verhält sich wie ein Zeiger auf das erste Element, AUSSER es ist einer von 3 Fällen:
* Es wird der sizeof-Operator auf die Variable angewendet.
* Es wird der unäre &-Operator auf die Variable angewendet.
* Irgendwas mit der Initialisierung von String-Literalen.Du hast gerade Ausnahme Nummer 2 erwischt.
Für praktische Zwecke sicher ausreichend, im Kontext von C++ aber genau genommen falsch.
C++ ist nicht C.Ein Array zerfällt, wenn der Kontext das verlangt:
int foo[42]; foo; // (1) typeid(foo); // (2) void bar(int (&)[42]); bar(foo); // (3)(1)hier findet in C++ kein Zerfall statt. Mangels Beobachtbarkeit spielt das natürlich keine wirkliche Rolle. Wichtiger ist schon, das obige Liste eben nicht vollständig ist:
(2)typeid wertet den Ausdruck, auf den es angewendet wird nicht aus, wenn der Type des Ausdrucks keine polymorphe Klasse ist. Mithin keine Array-Zerfall.
(3)Ein Array kann an einen geeigneten Referenzparameter beim Funktionsaufruf gebunden werden - wiederum kein Zerfall.
Kein Anspruch auf Vollständigkeit.
-
camper schrieb:
Für praktische Zwecke sicher ausreichend, im Kontext von C++ aber genau genommen falsch.
Gut zu wissen, dass das in C++ nochmal minimal anders ist. Danke für die Ergänzung/Richtigstellung.
-
Bacid90210 schrieb:
Warum ist der Inhalt der Array-Variablen ihre eigene Adresse .
In deinem Fall hast Du das Array auf dem Stack initialisiert. Somit ist die Addy der Variable identisch mit der ersten Addresse des Array's,...
Du wirst es nicht glauben aber element[8] wäre quasi der inhalt von deines ptr Pointers
