Страница 1 из 1

Многомерные массивы в AtmelStudio ЧЯДН?

Добавлено: Вт ноя 28, 2017 09:20:31
Алексей bird
Коллеги, прошу подсказки, есть код:
  • //Переменные
    uint8_t lev_red, lev_green, lev_blue;
    //Определяем массив
    uint8_t lev[3][3] = {{255,0,0 },{0,255,0},{0,0,255}};
    ....
    ....
    //Присваиваем значения из массива переменным
    lev_red=lev[0,0]; lev_green=lev[0,1];lev_blue=lev[0,2];
Вроде должно присвоится каждой переменной 255, но почему-то они получают, судя по дебагеру(да и в железе не то):96, 99, 102. Да я знаю, что массив 3 на 3, но определяю и использую только первую строку, пока.

Re: Многомерные массивы в AtmelStudio ЧЯДН?

Добавлено: Вт ноя 28, 2017 09:34:47
ARV
я могу ошибаться, но результат операции "запятая" определяется первым перечисляемым значением... поэтому 0,0 это 0, и соответственно [0,0] эквивалентно [0]. а для многомерных массивов это означает указатель... вот и странное значение.

правильно надо так: lev[0][0];

Re: Многомерные массивы в AtmelStudio ЧЯДН?

Добавлено: Вт ноя 28, 2017 15:54:43
Алексей bird
ARV
Спасибо!

Добавлено after 6 hours 3 minutes 40 seconds:
Ещё вопрос про массивы: как лучше поступить, использовать один большой массив [160][3] или разбить на меньшие восемь массивов [20][3]?
По идее в первом случае потребуется меньше памяти, но это мой дилетантский взгляд)))
ЗЫ Массивы планирую держать в EEPROM

Re: Многомерные массивы в AtmelStudio ЧЯДН?

Добавлено: Вт ноя 28, 2017 17:53:28
ARV
размер массива в первом случае 160х3=480, во втором 20х3=60 - это как бы две большие разницы. ну и никак первый массив меньше памяти не займет...

Re: Многомерные массивы в AtmelStudio ЧЯДН?

Добавлено: Ср ноя 29, 2017 03:54:14
Ivanoff-iv
Памяти должно уйти поровну, контроллер потом не будет знать что это массив, он будет брать адрес= адрес 0го + i, адрес 0го скорее всего будет константой, вычисленной при компиляции.

Re: Многомерные массивы в AtmelStudio ЧЯДН?

Добавлено: Ср ноя 29, 2017 09:02:04
Алексей bird
Ivanoff-iv спасибо!
ARV не забудь, что 60 ещё надо умножить на 8, тк. будет восемь массивов