我在 C++ 代码中阅读了 String* 并感到困惑,是否有必要使用 String* ?我可以改用 char* 吗?例如 StreamReader 有 ReadLine() 函数,为什么不要求用户首先安排一个 char 数组,该函数只是将字符串存储在其中,返回一个 char* 指针,一切正常。
问问题
238 次
3 回答
5
请注意,这char*
是指向单个字符串或多个字符(字符数组)的指针,而是指向单个或多个string*
(数组)字符串对象的指针。但是,C# 不支持指向托管类型(例如字符串)的指针
例子:
unsafe void f()
{
char ch = '3';
char* cPtr = &ch;
*cPtr = '4'; // ch == '4'
fixed (char* ccPtr = new char[30])
{
*(ccPtr + 15) = '4'; // arr[15] == '4'
}
string* ptr; // error: cannot declare a pointer to managed type
fixed (char* pptr = new string(new char[] { 'a', 'b', 'c' }))
{
pptr[2] = 'd';
}
}
于 2012-10-13T07:39:19.847 回答
0
我不太完全理解您的问题,但 string* 可能指的是字符串数组而不是单个字符串。在这种情况下 char* 将不起作用。希望有帮助。
于 2012-10-13T07:41:54.243 回答
0
在 C# 中,字符串通常由 C# 类型string
或 .net 类型处理String
(这是同一件事)。char*
是 C/C++ 对字符串的思考方式。虽然 C# 中确实存在指针,但它们确实不是要走的路(它们正式不安全)。字符数组将是 a char[]
,而不是 a char*
。
在 C# 中,类实例作为引用存储,结构作为值存储。引用基本上是指针的托管版本。如果传递类实例,则通过引用传递对象,如果传递结构,则通过值传递。换句话说,如果您想要将数据作为指向 C++ 中的类/结构的指针传递,您应该使用 C# 类。优点是您可以通过引用传递,并且您可以使用它来做您可以用指针做的事情(如链表)。缺点是如果你把一个类放在一个类中,你会增加重定向的次数(从而增加访问时间)。如果您希望将数据存储为值(例如减少类中结构的间接次数),您应该使用结构。in
/ref
参数。
于 2012-10-13T07:43:00.690 回答