C/C++ Zeiger auf Struckt

Code:
void funktion(int*pi){
 ++*pi;
 pi = false; }

int main(){
 int i = 1;
 int* pi = &i;
 funktion(pi);
 //i ist jetzt 2, pi ist immernoch &i
}
 
Für sowas würde ich dann auf Referenzen umsteigen. Die sehen etwas "schöner" aus, als Pointer. Und sie können nicht NULL sein (es sei denn, man baut richtig Mist).

Das würde so aussehen:

Code:
void funktion( int& ri )
{
  ++ri;
  // pi = false; (huh)
}

int main()
{
  int i = 1;

  funktion( i );

  //i ist jetzt 2
}
 
Ja stimmt, das ist etwas unpraktisch. Muss man dann im Constructor übergeben und überhaupt.

Also eher Off Topic: Bei Funktionen mit Parametern bist du mit Referenzen fast immer besser dran (ausser du brauchst einen ungültig-Status für die Variable).
 
:offtopic:
Seit wann werden Zeiger bei einem Funktionsaufruf geändert? Alle Werte kommen genau so in der Funktion an, wie du sie übergibst.
Ach das geht schon. Man muss nur bissle "Mist" bauen und schon hat man einen üblen bösen "Speicherüberschreiber" - Marke elendiger Hund.
Dann kompiliert man das Ganze noch mit einem "engen" Speicherlayout und Optimierungen und fertig ist der selbstmodifizierende Pointer.

Fortgeschrittene C/C++ Programmierer könnten sich sogar noch den Stackframe verbiegen, das macht besonders Spaß.

Für die ganz gewieften in C++ gibts noch das V-Table Zerstören und Durcheinanderbringen macht sehr viel Spaß bei tief verschachtelten Ableitungen und Interfaces.

Gruß Homer
P.S. bitte nimmt den Post nicht ernst.
 
Zurück