Доброй ночи. Застрял на таком моменте. есть код Код (C++): void menu_line(int lines2, char color_men){ int posicion[5] = {0,15, 50, 95, 135}; tft.fillRect(10, posicion[lines2], 220, 40, COLORS); int ryad= posicion[lines2]; tft.println (ryad);//Выводит нужные значения, но необходимо в функцию ниже вывести. } Необходимо при изменении значения ines2 из функции menu_line передать в переменной ryad нужное значение массива. и вывести на экран tft.println (ryad); Код (C++): void sub_menu(int submenu){ menu_line(submenu,1); tft.println (ryad); Подскажите как это сделать. а то что то не соображу. Спасибо.
Раз пять прочитал, так и не понял вопроса. Попробую угадать. Объявите массив глобально и он уже будет виден из всех функций. Передайте в функцию указатель на первый член массива. Возвращать либо через переменную объявленную в функции: int sub_menu(), return x; либо через глобальные же переменные, либо через указатели.
Код (C++): int menu_line(int lines2, char color_men){ ... return posicion[lines2]; } void sub_menu(int submenu){ int ryad(menu_line(submenu,1)); tft.println(ryad); }
Спасибо сделал глобальным, он у меня раньше был глобальным. Я хотел его засунуть в функцию, так как мне надо сделать три одинаковых массива но с разными координатами,(думал смогу функцию сделать, но видимо пока опыта не хвает) Просто при изменении шрифта строка tft.fillRect(10, posicion[lines2], 220, 40, COLORS); Не совпадает с текстом.
Массив передается по указателю. Если не освоили указатели, то не надо связываться. Очень легко сделать нестабильно работающую программу.
Спасибо буду осваивать. Тут еще возникает вопрос, а что если в функции есть разные типы данных. Как их передавать. к примеру функция ниже на сколько она правильна. Код (C++): char conf_block(char* text_section, char textcursor, int lines, int area_flag) { tft.setCursor(12, textcursor); tft.setTextColor(YELLOW,BLACK); tft.setTextSize(size_menu_text); tft.println( "section\t"); tft.println(text_section); //SECTOR A conf_block("SECTOR A",13, lines, area_flag); tft.setCursor(120, textcursor); tft.println(lines); //Выводит номер lines главного меню из функции counter_menu tft.setCursor(160, textcursor); tft.setTextColor(WHITE); tft.println(area_flag);//Выводит номер флага void loop() { conf_block("SECTOR B",33, lines2, area_flag); } } Наверное надо было указать void conf_block( в место char conf_block( И еще не понятно вот что функция Код (C++): void menu_line(); Размещаю в другой функции Код (C++): menu_line(submenu,1); если убрать цифру 1 будет ошибка, как правильно передать параметры чтоб ошибок не было. и почему если указываю цифру 1 то ошибки нет и все работает. Просто хочу понять. Код (C++): void menu_line(int lines2, char color_men){ tft.fillRect(10, posicion[lines2], 220, 40, COLORS); tft.fillRect(220, posicion[lines2], 26, 40, COLORS2); int ryad= posicion[lines2]; tft.print(ryad); }
У функции два обязательных аргумента: lines2 и color_men void menu_line(int lines2, char color_men){ значит и параметров должно быть два.
Поскольку аргумент color_men не ипользуется, его можно удалить void menu_line(int lines2){ и вызывать функцию передавая только один параметр.
Код (C++): int menu_line(int lines2){ ... return posicion[lines2]; } void sub_menu(int submenu){ int ryad(menu_line(submenu)); tft.println(ryad); }
По теме: массивы - по указателю, куча параметров - 1) "в лоб" через аргументы, 2) по указателю/ссылке на структуру с ними.
Спасибо за помощь. Раньше писал на PHP И тоже с функциями не дружил. Процедурным стилем писал,хотя не удобно было.
Английский я знаю на 5% Код пишу для себя, по этому пока пишу так как проще. Хотя я месяц назад взял в руки книгу по ардуино и СИ
Извините просто пропустил скобку, Без скобки получим сразу же ошибку. is not allowed here before '{' token
Немного не понял. Вы имели ввиду 1) что массивы - по указателю = куча параметров 2) в лоб" через аргументы или если по указателю то пишем 1, а через аргументы 2.? Спасибо.
Код (C): // передаем массив void foo(float *u, int n) { for (int i=0; i<n; i++) { u[i] = i*M_PI; } } void bar() { const int N = 10; float a[N]; foo((float*)a, N); } Код (C): // передаем массив и еще какие-то параметры void foo(float *u, int n, float b, float c) { for (int i=0; i<n; i++) { float x = i*M_PI; u[i] = 1.0+b*x+c*x*x; } } void bar() { const int N = 10; float b = 1.23, c = -4.56; float a[N]; foo((float*)&a, N, b, c); } Код (C): // передаем структуру по ссылке struct foo_param_t { float *u; int n; float c; float b; } void foo(foo_param_t& p) { for (int i=0; i<p.n; i++) { float x = i*M_PI; p.u[i] = 1.0+p.b*x+p.c*x*x; } } void bar() { const int N = 10; float a[N]; foo_param_t p = {(float*)&a, N, 1.23, -4.56}; foo(p); } Код (C): // передаем структуру по указателю struct foo_param_t { float *u; int n; float b; float c; } void foo(foo_param_t *p) { for (int i=0; i<p->n; i++) { float x = i*M_PI; p->u[i] = 1.0+p->b*x+p->c*x*x; } } void bar() { const int N = 10; float a[N]; foo_param_t p = {(float*)&a, N, 1.23, -4.56}; foo(&p); }
Эти примеры только для демонстрации некоторых способов передачи параметров, они несколько упрощены относительно "правильного" стиля написания кода. p.s. код писал на бегу, могут быть небольшие опечатки.