Почему foreach в C ++ не может пройти первый элемент? - PullRequest
0 голосов
/ 21 октября 2019

В цикле foreach кажется, что первый элемент не пройден, а 6-й элемент num[5] пройден, что не определено.

#include<iostream>
using namespace std;
int num[5];
int main() {
    for (int i = 0; i < 5; i++) num[i] = i + 1;
    for (auto i : num) cout << num[i] << " ";
    return 0;
}

ожидаемый результат: 1,2,3,4,5

выход: 2,3,4,5,0

Ответы [ 2 ]

3 голосов
/ 21 октября 2019

Поскольку i не индекс, а значение, вы должны заменить:

for (auto i:num)cout<<num[i]<<" ";

на

for (auto i:num)cout<< i <<" ";

Тогда вы получите правильный вывод 1 2 3 4 5

0 голосов
/ 21 октября 2019

for (int i=0;i<5;i++)num[i]=i+1;

Загружает переменную num, например [0] = 1, [1] = 2 ... [4] = 5

for (auto i:num)cout<<num[i]<<" ";

Это действительно происходитчерез значения в num, а не в индексах, поэтому у вас есть печать num[1], num[2] ... num[5] (кстати, num[5] - неопределенное поведение)

...