Ist diese Funktionsdeklaration in C#:
void foo(string mystring)
dasselbe wie dieses in C:
void foo(char *)
d.h. erhält die aufgerufene Funktion in C# einen Zeiger hinter den Kulissen?
Ist diese Funktionsdeklaration in C#:
void foo(string mystring)
dasselbe wie dieses in C:
void foo(char *)
d.h. erhält die aufgerufene Funktion in C# einen Zeiger hinter den Kulissen?
Ja, denn eine Zeichenkette hat eine dynamische Größe, so dass hinter den Kulissen Heap-Speicher vorhanden sein muss.
Sie sind jedoch NICHT dasselbe.
in c zeigt der Zeiger auf eine Zeichenkette, die auch an anderen Stellen verwendet werden kann, so dass sich eine Änderung auf diese anderen Stellen auswirken wird.
Alles, was kein "Wertetyp" ist, was im Wesentlichen Enums, Booleans und eingebaute numerische Typen umfasst, wird "per Referenz" übergeben, was wohl dasselbe ist wie der C/C++-Mechanismus der Übergabe per Referenz oder Zeiger. Syntaktisch und semantisch ist es im Wesentlichen identisch mit der C/C++-Übergabe per Referenz.
Beachten Sie jedoch, dass Strings in C# unveränderlich sind, so dass Sie den String nicht bearbeiten können, ohne einen neuen zu erstellen, auch wenn er per Referenz übergeben wird.
Beachten Sie auch, dass Sie in C# ein Argument nicht als "const" übergeben können, unabhängig davon, ob es sich um einen Werttyp oder einen Referenztyp handelt.
Während diese in der Tat in einem semantischen Sinne äquivalent sind (d.h. der Code macht etwas mit einer Zeichenkette), hält C#, wie Java, Zeiger komplett aus dem alltäglichen Gebrauch heraus und verbannt sie in Bereiche wie Übergänge zu nativen OS-Funktionen - selbst dann gibt es Framework-Klassen, die diese schön verpacken, wie SafeFileHandle.
Lange Rede, kurzer Sinn: Machen Sie sich nicht die Mühe, über Zeiger in C# nachzudenken.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.