Wozu Arrays in C++`??
-
ganz einfach
wenn DU einen Zeiger erstellst, zeigt der Prinzipiell erst mal ins Nirvana ....
(bei M$ : #define nirvana 0xcdcdcdcd )
dort steht sonstwas, nur nix brauchbares oder ungefaehrlichesDeshalb ist es guter Stil, zeiger immer gleich zu inititalisieren,
wenn Du die Adresse (noch) nicht weisst, nimmst du NULL !
also int * pInt = NULL ; Das erkennt der compiler und motzt, wenn du an dieser Adresse was versuchst zu veraendern !!!Zeiger sind natuerlich nur nuetzlich, wenn DU die Adressen weisst. die wirst aber nie in ihrer numerischen Form benutzen .... das ist zu umstaendlich und fehlertraechtig .... also "int *i = reinterpret_cast<int*>(123456789);" ist zwar technisch moeglich, aber nich wirklich elegant ....
Heisse Kandidaten zum holen von Adressen sind :
- der AdressOf-Operator "&"
- der "new" Operator
- und, logisch, andere Zeiger .....Fuer den Umgang mit Waffen braucht man meist nen Waffenschein, fuer den Umgang mit Zeigern sollte man zumindest mal die Toutorials gelesenen haben
Ciao ...
-
wenn DU einen Zeiger erstellst, zeigt der Prinzipiell erst mal ins Nirvana ....
naja, theroretisch könnte er auch zufällig genau dahin zeigen wo man will:)
Zeiger sind nicht in aller Regel gefährlich wenn man richtig damit umgeht!
was ist schon gefährlich wenn man richtig damit umgeht
[ Dieser Beitrag wurde am 25.03.2003 um 11:24 Uhr von crass editiert. ]
-
Kettensägenjongleure vor!
-
Original erstellt von Lars:
[QB]Zeiger sind nicht in aller Regel gefährlich wenn man richtig damit umgeht!Deswegen habe ich ja geschrieben "können gefährlich sein"... Den Grund dafür siehst du wenn du dir die Fragestellung dieses Threads anguckst. Das ist nämlich gefährlich, da dort nicht richtig damit umgegangen wird...
-
Original erstellt von <XYZ>:
**Deshalb ist es guter Stil, zeiger immer gleich zu inititalisieren,
wenn Du die Adresse (noch) nicht weisst, nimmst du NULL !
also int * pInt = NULL ; Das erkennt der compiler und motzt, wenn du an dieser Adresse was versuchst zu veraendern !!!
**Also meinem Compiler ist das egal
Original erstellt von <XYZ>:
**Zeiger sind natuerlich nur nuetzlich, wenn DU die Adressen weisst. die wirst aber nie in ihrer numerischen Form benutzen .... das ist zu umstaendlich und fehlertraechtig .... also "int *i = reinterpret_cast<int*>(123456789);" ist zwar technisch moeglich, aber nich wirklich elegant ....
**Es ist noch nichtmal technisch realisierbar auf eine feste numerische Adresse zuzugreifen, da sich die Adresse des Objektes nach jedem Programmaufruf ändern kann...
// Dies wird in ca. 1/1000000000000000 Fällen zufällig nicht zum Absturz führen int *p = (int*)0x090DCA64; int i = p[24];
-
Es ist noch nichtmal technisch realisierbar auf eine feste numerische Adresse zuzugreifen, da sich die Adresse des Objektes nach jedem Programmaufruf ändern kann...
Früher unter DOS war sowas mal sinnvoll. an bestimmten adressen waren bestimmte Teile des Betriebssystems. bei 0xb800 lag eine Speigelung des Grafikkartenspeichers, usw. Je nach Plattform für die man programmiert kann es durchaus sinnvoll sein.
-
Original erstellt von Helium:
**
Früher unter DOS war sowas mal sinnvoll. an bestimmten adressen waren bestimmte Teile des Betriebssystems. bei 0xb800 lag eine Speigelung des Grafikkartenspeichers, usw. Je nach Plattform für die man programmiert kann es durchaus sinnvoll sein.**Ja, aber wir reden ja wohl im Moment von aktuellen Plattformen die die Benutzung von fremdem Speicher sowieso verhindern, oder hab ich da jetzt was nicht mitbekommen und wir reden die ganze Zeit von DOS???
-
aktuellen Plattformen
koennen das auch micro-controller sein ?
Ciao ...
-
Original erstellt von <XYZ>:
[quote] aktuellen Plattformen**
koennen das auch micro-controller sein ?Ciao ...**[/QUOTE]
Bist ja ein ganz schlauer. Auch ein Microcontroller kann mit:
int* i; i[2]=7;
nicht wirklich viel anfangen
-
Also nochmal:
Wenn ich sowas hier benutze:
int* i;
*i=2;
heißt das dann, das das einen Absturz verursachen kann?
Gruß, Maxi
-
JA! Eindeutig!