C# C语言中字节数组的增量指针#

C# C语言中字节数组的增量指针#,c#,c++,arrays,pointers,unsafe,C#,C++,Arrays,Pointers,Unsafe,我有一个byte[]data,其中不需要第一个元素。数组非常大,所以我不想将它复制到另一个数组(有效负载),如下所示 Buffer.BlockCopy(数据,1,有效负载,0,计数) 在C++中,我可以只增加数组指针来移动Pooer-E/P> int main() { char* data= "!Hello, World!"; data++; std::cout << data<< std::endl; } intmain()

我有一个
byte[]data
,其中不需要第一个元素。数组非常大,所以我不想将它复制到另一个数组(
有效负载
),如下所示

Buffer.BlockCopy(数据,1,有效负载,0,计数)

在C++中,我可以只增加数组指针来移动Pooer-E/P>
int main()
{
    char* data= "!Hello, World!";
    data++;
    std::cout << data<< std::endl;
}
intmain()
{
char*data=“!你好,世界!”;
数据++;

std::cout数组的长度是不可变的,因此可以从索引1而不是0开始循环,也可以将其复制到另一个索引。

数组的长度是不可变的,因此可以从索引1而不是0开始循环,也可以将其复制到另一个索引。

var data=newchar[]{'!'、'H'、'e'、'l'、'l'、'o'、''、'W'、'o'、'r'、'l'、'd'、'!';
foreach(数据[1..]中的var ch)Console.Write(ch);
Console.WriteLine();
给出: 你好,世界!

var data=newchar[]{'!'、'H'、'e'、'l'、'l'、'o'、''、'W'、'o'、'r'、'l'、'd'、'!';
foreach(数据[1..]中的var ch)Console.Write(ch);
Console.WriteLine();
给出:
你好,世界!

通过对数组进行切片来使用span,
数据。切片(1)
将创建一个
span
,从数组的索引1开始,到最后一个元素结束。您可能需要首先将数组强制转换为
span
,我不知道它是否隐含。因此它应该是
((span)数据)。切片(1);
。这不会导致复制,它本质上是指向数组的安全指针。此外,如果效率重要,索引到
Span
的速度应该与索引到数组的速度一样快。它是直接指针,而不是存储对数组的引用和偏移量/边界的
ArraySegment
。通过切片数组使用Span,
data.Slice(1)
将创建一个
Span
,从数组的索引1开始,到最后一个元素结束。您可能需要首先将数组强制转换为
Span
,我不知道它是否隐含。因此它应该是
((Span)data)。Slice(1);
。这不会导致复制,它本质上是指向数组的安全指针。此外,如果效率很重要的话,索引到
Span
的速度应该与索引到数组的速度一样快。它是一个直接指针,而不是存储数组引用和偏移/边界的
ArraySegment