如何解决在 C# 字符串构造函数 String(Char*) 中,为什么构造函数不需要指向字符数组的指针?
我已经使用 C# 好几年了,但从未在 C# 中使用过指针。我正在尝试使用 String API,但我不明白为什么 char* 实际上是一个数组而不是单个字符。
API 定义:
[System.CLSCompliant(false)]
public String (char* value);
API 文档的片段:
参数
价值 Char*
指向以空字符结尾的 Unicode 字符数组的指针。
声明 char* singleChar
是指向单个字符的指针吗?指针文档 example 似乎是这么说的。
那么,为什么/为什么它也可以是指向数组的指针?为什么参数类型不是 char[]*
?
解决方法
C# 中的 char[]*
在技术上是不可能的,因为托管类型(在这种情况下 char[])不能是指针,更正确的是 char**
。使用指向指针的指针有点令人困惑,但可以将其视为一个 char 数组的数组。
不安全 C# 代码中的指针只是对内存区域的引用。在 C
语言中,char 数组通常以空字符结尾(字节值为 0),使用连续的内存块存储字符串。这同样适用于 C#,char*
只是一个指向 char
类型的连续内存块的指针。
示例:
Memory address 0x10000000 : h
Memory address 0x10000002 : e
Memory address 0x10000004 : l
Memory address 0x10000006 : l
Memory address 0x10000008 : o
Memory address 0x1000000A : \0
在 C# 中,您可以使用 char* ptr = (char*)0x10000000
- 并且内存将指向字符 h
、e
、l
、l
、{{1 }},o
。
您可以使用 \0
关键字将单个 C# 数组转换为 char*
,该关键字将字符数组固定下来,防止垃圾收集或内存移动。
fixed
上例中的 char[] chars = new char[64];
// fill chars with whatever
fixed (char* charPtr = chars)
{
}
也可以是 chars
。
希望这些信息中的一些有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。