Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <stdio.h> int main() { int *myptr; myptr = NULL; int bla = 10; myptr = bla; return 0; } |
Zitat von »"$nooc"«
ist das dann falsch?
C-/C++-Quelltext
1 2 3 4 5 6 int *myptr; myptr = NULL; int bla = 10; myptr = bla;
C-/C++-Quelltext |
|
1 |
int* myptr = &bla; |
Nein, du kannst ihn auch auf etwas Bestehendes zeigen lassen, wie hier auf bla.Zitat
muss ich für meinen pointer speicher reservieren?
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <stdio.h> int main() { int *myptr; myptr = NULL; int bla = 10; myptr = &bla; return 0; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <stdio.h> int main() { int *myptr; myptr = new int; int bla = 10; *myptr = bla; // Löschen nicht vergessen delete myptr; return 0; } |
Zitat von »"Databyte"«
Also theoretisch geht das [...]
3. Du setzt deinen Zeiger auf 10, was bedeutet, er zeigt nun an die
Speicherstelle "10"... und ich denke mal dass du dass nicht willst ,
Zitat von »"Databyte"«
C-/C++-Quelltext
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <stdio.h> int main() { int *myptr; myptr = new int; int bla = 10; *myptr = bla; // Löschen nicht vergessen delete myptr; return 0; }
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
int main() { int bla = 10; int* myptr = new int(bla); delete myptr; } |
Zitat von »"Nexus"«
Zitat von »"Databyte"«
Also theoretisch geht das [...]
3. Du setzt deinen Zeiger auf 10, was bedeutet, er zeigt nun an die
Speicherstelle "10"... und ich denke mal dass du dass nicht willst ,
Nein, der Code wird einen Compilerfehler verursachen. So schwach typisiert ist C++ nicht, als dass es implizite Umwandlungen zwischen Zeigern und integralen Typen erlauben würde. Für diesen Zweck gibt es den reinterpret_cast-Operator.
Zitat von »"Nexus"«
Zitat von »"Databyte"«
C-/C++-Quelltext
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <stdio.h> int main() { int *myptr; myptr = new int; int bla = 10; *myptr = bla; // Löschen nicht vergessen delete myptr; return 0; }
Der Code erhält sehr viel Redundanz. Das folgende Programm macht das Gleiche:
C-/C++-Quelltext
1 2 3 4 5 6 int main() { int bla = 10; int* myptr = new int(bla); delete myptr; }
C-/C++-Quelltext |
|
1 2 3 |
int main()
{
}
|
Wenn es so klar ist, sag das doch nächstes Mal, sonst verwirrst du die Leute nur. Die Aussage, dass sein Code so funktioniere, ist nämlich eindeutig falsch.Zitat von »"Databyte"«
Da hast du natürlich recht, deshalb geht es ja auch nur theoretisch...
das der Compiler einen Fehler rauswerfen wird is klar
Okay. Ich wollte halt zeigen, dass das Ganze viel kürzer geht und - im Gegensatz zu deinem "redundanzfreien" Code - trotzdem das Gleiche bewirkt. Den Header <stdio.h> braucht man hier nicht, und auch das Fragmentieren der einzelnen Anweisungen bringt keinen wirklichen Vorteil.Zitat von »"Databyte"«
Wollte halt seinen eigenen code nur minimal verändern.
Zitat von »"Nexus"«
Wenn es so klar ist, sag das doch nächstes Mal, sonst verwirrst du die Leute nur. Die Aussage, dass sein Code so funktioniere, ist nämlich eindeutig falsch.Zitat von »"Databyte"«
Da hast du natürlich recht, deshalb geht es ja auch nur theoretisch...
das der Compiler einen Fehler rauswerfen wird is klar
Zitat von »"Nexus"«
Okay. Ich wollte halt zeigen, dass das Ganze viel kürzer geht und - im Gegensatz zu deinem "redundanzfreien" Code - trotzdem das Gleiche bewirkt. Den Header <stdio.h> braucht man hier nicht, und auch das Fragmentieren der einzelnen Anweisungen bringt keinen wirklichen Vorteil.Zitat von »"Databyte"«
Wollte halt seinen eigenen code nur minimal verändern.
Die ganze Geschichte mit "Zeiger immer sofort nullsetzen" ist sowieso Blödsinn. In vielen Funktionen hat man lokale Zeiger, die gleich mit einem Wert initialisiert werden. Dann kann man das auch ruhig direkt tun. Man muss natürlich nicht die Deklaration und erste Verwendung 10 Zeilen trennen...
Zitat von »"Databyte"«
(Obwohl ich hinzufügen muss, dass ein reinterpret_cast mir auch schonmal den inhalt eines pointers verändert wiedergegeben hat)
Zitat von »"Gotbread"«
Zitat von »"Databyte"«
(Obwohl ich hinzufügen muss, dass ein reinterpret_cast mir auch schonmal den inhalt eines pointers verändert wiedergegeben hat)
wieso den das? mir noch nie passiert, auf reinterpret_cast kann man sich
auch bei mehrfachvererbung, etc... verlassen!
C-/C++-Quelltext |
|
1 |
int *myP = new int; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
#include <stdio.h> int main() { int *myP; *myP = 5; printf("hi"); return 0; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <stdio.h> int main() { int *myP = malloc(sizeof(int)); *myP = 5; printf("hi"); free(myP); return 0; } |
Werbeanzeige