Звонок по ссылке не работает должным образом

1

В примере с веб-сайтом Microsoft ниже приведены коды:

class TestRef
{
    static void FillArray(ref int[] arr)
    {
        // Create the array on demand: 
        if (arr == null)
        {
            arr = new int[10];
        }
        // Fill the array:
        arr[0] = 1111;
        arr[4] = 5555;
    }
}

Если я удалю строку if (arr == null), выход ошибки будет 0 0 0 0 0 не 1 2 3 4 5. Зачем?

  • 0
    ссылка кодов: msdn.microsoft.com/en-us//library/szasx730.aspx
  • 0
    Если вы создаете new int[] массив new int[] , все элементы инициализируются в 0 . Это ты спрашиваешь?
Показать ещё 1 комментарий
Теги:
arrays
ref

3 ответа

4
Лучший ответ

Это связано с тем, что вы передаете ref это означает, что вы меняете указатель на эту переменную в main методе.

Вы назначаете его новому int[] который заполняется значением по умолчанию int которое равно 0

  • 1
    поэтому на выходе будет 1111 0 0 0 5555 0 0 0 0 0
0

Здесь, в функции FillArray вы передаете массив по ссылке
но когда вы удаляете блок if
вы повторно инициализируете массив

когда вы инициализируете массив типа значения, элементы принимают значение по умолчанию для типа значения
В этом случае это int которые имеют значение по умолчанию 0

Вы должны понимать pass by value vs pass by reference в С#
http://www.programminginterviews.info/2011/05/pass-by-value-versus-reference-in-c.html

также тип значения vs ref type
http://www.albahari.com/valuevsreftypes.aspx

0

это происходит потому, что когда вы помещаете свой код, так как это означает, что вы передаете свой intArray методу, но когда вы удаляете строки, как вы упомянули в этом случае, new int [] присваивается переменной, которая будет заполнять значение по умолчанию 0 в вашем массиве,

эта строка arr = new int[10]; присваивает новый int [] при удалении условий.

Как указано на официальном сайте: -

Параметр ref массива может быть изменен в результате вызова. Например, массиву может быть присвоено нулевое значение или может быть инициализировано в другой массив.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню