初始值
Matrix<float>[] output_measurement = new Matrix<float>[25];
Matrix <float> output_measurement_temp= new Matrix<float>(6, 1);
for (int i = 0; i < 25; i++)
{
output_measurement[i] = new Matrix<float>(6, 1);
}
分配值
for (int i =0;i<25;i++)
{
for (int j = 0; j < 3; j++)
{
if (measure1joint[j, 0] != 10f)
{
output_measurement_temp[j, 0] = measure1joint[j, 0];
output_measurement_temp[j + 3,0] = 0f;// set velocity =0
}
}
output_measurement[i]=output_measurement_temp;// Problem here!
}
我的问题是:每次更改Maitrix“output_measurement_temp”的值时,数组Matrix中的所有已分配值一起更改为新更新的output_measurement_temp。例如:
第一次:output_measurement_temp = 0,output_measurement [0] = 0
第二次:output_measurement_temp = 1,output_measurement [0] = 1 ,output_measurement [1] = 1
任何人都可以帮我解释它为什么会发生。
编辑:如果我在为其分配新值之前重置output_measurement_temp的值,则“output_measurement”中指定值的值将不再更改。但我不知道为什么它可以提供帮助
output_measurement_temp = new Matrix<float>(6, 1);
for (int j = 0; j < 3; j++)
{some code...}
答案 0 :(得分:1)
C#中的Matrix是一种引用类型,但它是一种值类型。当你更改&#34; output_measurement_temp&#34;并将其分配给output_measurement [i],您只需指定&#34; output_measurement_temp&#34;的引用。实际上是output_measurement [i]而不是output_measurement_temp的值。每次你标记为&#34;在这里有问题的行&#34;也是这样。
答案 1 :(得分:0)
我很长时间没有使用过C#或Java,所以我希望你可以原谅我在这里犯的任何错误。根据您的描述,output_measurement_temp
看起来不存储Matrix
,但它包含Matrix
值存储在内存中的位置的地址。因此,每次将新值传递给output_measure_temp
时,它都会使用output_measurement_temp
上的地址并在内存中找到该位置,并将值更改为您要存储的值。
在第二种情况下,当您声明new
时,您在内存中分配一个新位置以存储新值。