gpt4 book ai didi

C# 数组和指针

转载 作者:行者123 更新时间:2023-11-30 19:32:02 25 4
gpt4 key购买 nike

关于将数组传递给函数,然后处理数组内容 (Array.Reverse),然后使用指针,我从数组中提取值。但在进入该功能之前,这是我所做的;

byte[] arrayA = OriginalArray
byte[] arrayB = arrayA;

manipulate(OriginalArray);

抽象出来的函数是这样的

manipulateArray(byte[] OriginalArray) // This is unsafe
{
// Unsafe code that keeps a pointer to OriginalArray
// Array reverse
// Value extraction via pointer
}

这样做之后,令我惊讶的是,arrayB 现在“已经”操纵了它的值,就好像我已将它传递给函数一样!除非我错过了什么,否则我很确定我没有做错什么。我确保在 arrayA 和 arrayB 赋值之后调用该函数。

需要这方面的指导。谢谢

最佳答案

如果您希望 arrayB 保留相同的值,则需要复制 arrayA。 arrayA 和 arrayB 都指向示例中的相同引用。

这里有一个简单的例子来说明这一点:

byte[] originalArray = new byte[] { 1, 2, 3 };
byte[] arrayA = originalArray;
byte[] arrayB = arrayA;

//Both arrays point to the same reference, changes to arrayA
//or arrayB will affect both variables
arrayA[0] = 3;
arrayB[2] = 1;
//Both will output 3, 2, 1
Console.WriteLine("{0} {1} {2}", arrayA[0], arrayA[1], arrayA[2]);
Console.WriteLine("{0} {1} {2}", arrayB[0], arrayB[1], arrayB[2]);

//Copy array - both arrays point to different references
//Actions on arrayA will not affect arrayB
arrayB = new byte[arrayA.Length];
arrayA.CopyTo(arrayB, 0);
arrayA[0] = 1;
arrayA[2] = 3;
//First will output 1,2,3, second will output 3, 2, 1
Console.WriteLine("{0} {1} {2}", arrayA[0], arrayA[1], arrayA[2]);
Console.WriteLine("{0} {1} {2}", arrayB[0], arrayB[1], arrayB[2]);

关于C# 数组和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6049028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com