Страница 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, тк. будет восемь массивов