Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ссылочная магия.

414
05 июня 2012 года
CassandraDied
763 / / 24.05.2012
 
Код:
int[] a = new int[5] {2, 6, 8, 12, 22};
int[] b = a;
int s = 0;
foreach( int x in a ) s += x;
b[0] = s;
a[0] = s / 3;
Console.WriteLine(a[0] + b[0]);
Объясните кто-нибудь, почему после s/3 в b[0] будет 16, а не 50? S-то не изменяется. MSVS 10.
40K
05 июня 2012 года
D129
228 / / 18.04.2012
Никакой магии.
Оператор присвоения ссылочного типа (массива) копирует только адрес массива.
у вас получается два имени одного и того же участка памяти.
То, что находится в этом участке памяти - суть одно и то же, а это целые числа в вашем случае.

Посмотрите еще проще - оператор new один?
Значит и массив один.
А ссылок на него может быть сколько угодно.

a[0] = s / 3;
меняет и b[0]
414
05 июня 2012 года
CassandraDied
763 / / 24.05.2012
Цитата: D129
Никакой магии.
Оператор присвоения ссылочного типа (массива) копирует только адрес массива.
у вас получается два имени одного и того же участка памяти.
То, что находится в этом участке памяти - суть одно и то же, а это целые числа в вашем случае.

Посмотрите еще проще - оператор new один?
Значит и массив один.
А ссылок на него может быть сколько угодно.

a[0] = s / 3;
меняет и b[0]


Гм. Думал, что ссылки появляются только в многомерных массивах,спасибо.
Забавно, но верного ответа на вопрос, что выведется на экран, в тесте не было - All Hail Российское образование!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог