C# 是否可以更改数组中变量的值?
我正在创建一个程序,需要在其中更改存储在数组中的整数的值。下面是我所说的一个例子:C# 是否可以更改数组中变量的值?,c#,arrays,C#,Arrays,我正在创建一个程序,需要在其中更改存储在数组中的整数的值。下面是我所说的一个例子: int num = 0; int[] nums = new int[] {num}; Console.WriteLine(nums[0]); nums[0] = 1; Console.WriteLine(nums[0]); Console.WriteLine(num); 此时,程序输出0、1、0。是否有一种方法可以通过仅使用数组来修改num的值,从而使其输出0、1、1?您的错误似乎在于认为变量num和nu
int num = 0;
int[] nums = new int[] {num};
Console.WriteLine(nums[0]);
nums[0] = 1;
Console.WriteLine(nums[0]);
Console.WriteLine(num);
此时,程序输出0、1、0。是否有一种方法可以通过仅使用数组来修改num的值,从而使其输出0、1、1?您的错误似乎在于认为变量
num
和nums
之间存在引用
int[] nums = new int[] {num}
只需获取值0并将其分配给数组的第一个元素。以后改变其中一个不会改变另一个int
是一种值类型,这就是为什么不可能这样做的原因。您应该仔细阅读值和引用类型
但是,你可以尝试这样的方法,因为,就像我说的,你需要两个对同一事物的引用,才能改变一个事物,而改变另一个事物
class IntContainer { public int val;} //class with int field
IntContainer num = new IntContainer {val = 1}; //original set to 1
IntContainer[] nums = new[] {num};
nums[0].val = 200; //setting the array element
Console.WriteLine(num.val); //200 not 1
这是因为它更改了基础引用所指向的值。您的错误似乎在于认为变量
num
和nums
之间存在引用
int[] nums = new int[] {num}
只需获取值0并将其分配给数组的第一个元素。以后改变其中一个不会改变另一个int
是一种值类型,这就是为什么不可能这样做的原因。您应该仔细阅读值和引用类型
但是,你可以尝试这样的方法,因为,就像我说的,你需要两个对同一事物的引用,才能改变一个事物,而改变另一个事物
class IntContainer { public int val;} //class with int field
IntContainer num = new IntContainer {val = 1}; //original set to 1
IntContainer[] nums = new[] {num};
nums[0].val = 200; //setting the array element
Console.WriteLine(num.val); //200 not 1
这之所以有效,是因为它更改了基础引用所指向的值。您可能会混淆变量的名称,或者您不理解C#中引用类型和值类型之间的区别 示例中的num变量是值类型。而int[]nums是一种引用类型 分配值类型时,将值从一个变量复制到另一个变量。指定引用类型时,就是将对象的引用从变量指定给另一个变量。在这种情况下,当两个变量指向同一对象的引用,并且您在该对象中进行了更改时,您将在这两个对象中看到该更改 这里有另一个例子来说明这一点
int valueA = 1; // Copying value 1 to valueA
int valueB = valueA; // Copying valueA to valueB
int[] arrayReferenceA = new[] { valueA }; // Creates a reference of an array of value types
int[] arrayReferenceB = arrayReferenceA; // Copies a reference to the array
valueB = 2; // Copying value 2 to valueB
arrayReferenceB[0] = valueB; // Copying valueB to the first element of an array of values referenced by arrayReferenceB
Console.WriteLine(valueA);
Console.WriteLine(valueB);
Console.WriteLine(arrayReferenceA[0]);
Console.WriteLine(arrayReferenceB[0]);
其输出为
12
您要么是混淆了变量的名称,要么是不理解C#中引用类型和值类型之间的区别 示例中的num变量是值类型。而int[]nums是一种引用类型 分配值类型时,将值从一个变量复制到另一个变量。指定引用类型时,就是将对象的引用从变量指定给另一个变量。在这种情况下,当两个变量指向同一对象的引用,并且您在该对象中进行了更改时,您将在这两个对象中看到该更改 这里有另一个例子来说明这一点
int valueA = 1; // Copying value 1 to valueA
int valueB = valueA; // Copying valueA to valueB
int[] arrayReferenceA = new[] { valueA }; // Creates a reference of an array of value types
int[] arrayReferenceB = arrayReferenceA; // Copies a reference to the array
valueB = 2; // Copying value 2 to valueB
arrayReferenceB[0] = valueB; // Copying valueB to the first element of an array of values referenced by arrayReferenceB
Console.WriteLine(valueA);
Console.WriteLine(valueB);
Console.WriteLine(arrayReferenceA[0]);
Console.WriteLine(arrayReferenceB[0]);
其输出为
12
我想你可以做
num=1-num;控制台写入线(num)设置nums[0]=1后,代码>三次代码>,但我不知道您真正想问的是什么。我想问的是,您是否可以在不使用变量名称并使用数组的情况下更改变量的值。如果不编写代码,则无法使用另一个变量(甚至数组变量)修改一个变量的值。计算机完全按照你的要求去做,不多不少。您必须重新分配num
以更改其值。我想您可以执行num=1-num;控制台写入线(num)设置nums[0]=1后,代码>三次代码>,但我不知道您真正想问的是什么。我想问的是,您是否可以在不使用变量名称并使用数组的情况下更改变量的值。如果不编写代码,则无法使用另一个变量(甚至数组变量)修改一个变量的值。计算机完全按照你的要求去做,不多不少。您必须重新分配num
以更改其值。可能存在重复的