Guy*_*Guy 4 c c# string pointers language-implementation
这是C#中的函数声明:
void foo(string mystring)
Run Code Online (Sandbox Code Playgroud)
与C中的这个相同:
void foo(char *)
Run Code Online (Sandbox Code Playgroud)
即在C#中,被调用函数是否在幕后接收指针?
use*_*116 11
在这个特定的例子中,它更像是:
void foo(const char *);
Run Code Online (Sandbox Code Playgroud)
.Net字符串是不可变的并通过引用传递.但是,通常C#接收指向幕后对象的指针或引用.
C#的幕后有指针,虽然更像C++的智能指针,所以封装了原始指针。char* 与 System.String 实际上并不相同,因为指向 char 的指针通常意味着字符数组的开始,而 C# 字符串是具有长度字段和字符数组的对象。指针指向外部结构,该结构指向wchar_t数组之类的内容,因此有一些间接使用 C# 字符串和更宽的字符以支持 Unicode。
不可以。在 C#(和所有其他 .NET 语言)中,String 是一流的数据类型。它不仅仅是一个字符数组。您可以在它们之间来回转换,但它们的行为不同。有许多字符串操作方法(如“Substring()”和“StartsWith”)可用于 String 类,它们通常不适用于数组,字符数组只是其中的一个实例。