据我了解,根据MSDN C# 固定语句应该像这样工作:
fixed (char* p = str) ... // equivalent to p = &str[0]
那么,为什么我不能这样做?
const string str = "1234";
fixed (char* c = &str[0])
{
/// .....
}
例如,我如何获得指向str[1]
的指针?
据我了解,根据MSDN C# 固定语句应该像这样工作:
fixed (char* p = str) ... // equivalent to p = &str[0]
那么,为什么我不能这样做?
const string str = "1234";
fixed (char* c = &str[0])
{
/// .....
}
例如,我如何获得指向str[1]
的指针?
由于获取指向后面元素的指针直接适用于数组,但不适用于字符串,似乎唯一的原因是 MS 没有实现它。很容易按照数组的语义来设计它。
但是您可以轻松计算另一个指向其他数组元素的指针。所以在实践中这不是一个大问题:
fixed (char* p = str)
{
char* p1 = p+1;
}
该fixed
语句的重点是防止内存分配跨虚拟内存移动。内存分配由它的开始来标识,而不是由任何其他地址。
所以要保持&str[1]
固定,你真的需要整体str
固定;然后,您可以根据需要使用指针算法从固定指针派生单个分配中的其他指针str
。
将您的代码更改为:
char[] strC = "1234".ToArray();
fixed (char* c = &strC[0])
{
/// .....
}