Для каждой модификации цикла с примитивами - PullRequest
0 голосов
/ 13 мая 2018
int arr[] = {0,1,2,3,4,5};
for (int i : arr){
    i = 1;
}

(Вопрос 1): Почему этот сегмент кода не выдает ошибку, поскольку он использует цикл for-each для изменения элементов?

 int arr[] = {0,1,2,3,4,5};
  for (int i : arr){
      arr[i] = 1; 
  }

(Вопрос 2): Как работает этот код, даже если цикл for each не используется должным образом.Тем не менее, каким-то образом все элементы установлены в 1?

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Почему этот сегмент кода не выдает ошибку, поскольку он использует цикл for-each для изменения элементов?

Устанавливая i = 1, цикл не изменяет базовый массив, он просто изменяет фиктивную переменную i в этой итерации цикла.

Как работает этот код, хотя цикл for each не используется должным образом.

Устанавливая arr[i] = 1, цикл по совпадению просто устанавливает каждый элемент в массиве на 1. Это работает, потому что значения массива также являются адресуемыми индексами в массиве.

0 голосов
/ 13 мая 2018

(Вопрос 1): Почему этот сегмент кода не выдает ошибку, поскольку он использует цикл for-each для изменения элементов?

Не изменяет элементов . Он изменяет переменную i, которая в любой момент времени содержит копию одного из элементов , но в остальном она совершенно не связана с массивом.

(Вопрос 2): Как работает этот код, хотя цикл for each не используется должным образом.

Цикл действительно может выглядеть странно, но в этом нет ничего принципиально неправильного. Это эквивалентно следующему коду:

arr[0] = 1;
arr[1] = 1;
arr[2] = 1;
arr[3] = 1;
arr[4] = 1;
arr[5] = 1;

Конечно, это работает только потому, что arr содержит в себе действительные индексы. Если это не так (например, если arr[0]=6), вы получите ArrayIndexOutOfBoundsException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...