【问题标题】:For loop with ref array in C# [closed]C#中带有ref数组的for循环[关闭]
【发布时间】:2021-11-16 11:05:07
【问题描述】:

这个循环是如何工作的,我得到了 11、2、13、4、15 的结果? 我的意思是解释一个数字是如何进入for循环的以及会发生什么

        static void Main(string[] args)
    {
        int[] arr = new int[] { 1, 2, 3, 4, 5 };
        fun1(ref arr);

        Console.ReadLine();

    }
    static void fun1 (ref int[] array)
    {
        for (int i = 0; i < array.Length; i = i + 2)
        {
            array[i] = array[i] + 10;
        }
        Console.WriteLine(string.Join(",", array));
    }
}

【问题讨论】:

  • 使用单步调试器,单步执行代码并检查变量,这与ref 无关,无论如何数组都是通过引用传递的,您所做的只是传递对引用的引用,在这种情况下,它什么也没做
  • ref 在这里毫无意义,因为您没有为 array 分配新值。
  • "数组是通过引用传递的" - 这是不准确的。默认情况下,对数组的引用是按值传递的。这听起来像是毫无意义的语义,但通过引用传递允许重新分配函数内的参数,以修改在调用函数时分配给传入的变量的内容。
  • @moreON 你明白了,我应该说数组是引用类型,引用是按值传递的,在这种情况下,你只是通过引用传递一个引用。虽然我的说法仍然坚定

标签: c# arrays for-loop ref


【解决方案1】:

循环语句

for (int i = 0; i < array.Length; i = i + 2)

假设数组的长度为 5,您的循环变量 i 从 0 开始。它们每次迭代都会增加 2。这是因为您已经定义了表达式 i = i+2。所以我从0 -> 2 -> 4,当它到达6时,它不会进入循环。

因此,您只能访问数组的奇数元素

【讨论】:

    猜你喜欢
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2019-01-03
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多