Объясните странную работа массива

Litvan
Offline
Зарегистрирован: 08.05.2019

Привет, всем!

Скажите, пожалуйста, почему по этому коду загораются все светодиоды, а не 2?

int x = 13;
int ledpin[4];
void setup() {
  for(int i; i<5; i++){
    ledpin[i]=x;
    pinMode(ledpin[i], OUTPUT);
    x--;
  }
}

void loop() {
  for(int i = 3; i<5; i++){
    digitalWrite(ledpin[i], HIGH);
  }
}

А если заменить 

int ledpin[4]

на

int ledpin[5]

То будут гореть, как и планировалось, только 2 светодиода

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

4 строка for(int i=чему?; i<5; i++)

Кроме того состояние остальных выходов у Вас не определено никак.

Между 6 и 7 строкой определите digitalWrite(ledpin[i], LOW);

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да и память распахивать не надо. Определили массив [4], так чего туда <5 пихать?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Litvan пишет:

Скажите, пожалуйста, почему по этому коду загораются все светодиоды, а не 2?

А если заменить 

int ledpin[4]

на

int ledpin[5]

То будут гореть, как и планировалось, только 2 светодиода

Потому, что нумерация элементов массивов в С/С++ начинается с 0. И если вы определили массив как 

int ledpin[4]

То при х=4 вы уже выходите за границы масиива, что может приводить к малопредсказуемым непритным последствиям.  В случае int ledpin[5], все нормально.