Вывести массив из функции

Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт авг 15, 2023 06:46:22

Сообщение rss-999 »

Доброго времени коллеги. Помогите с решением.
Есть код который в конце создает массив. Как этот код правильно завернуть в функцию и правильно к ней обратиться, что бы получить массив. Не смог найти в интернете понятного объяснения

Код: Выделить всё


int i; //Создать массив пинов из 12 чисел
int j; //Создать массив пинов из 12 чисел
int o; // присвоить переменной каждое число из массива
int lenarr; //вычислить длинну массива
int k; //сравнить 
int d; //Создать массив без нужного числа
int arr[12];
int arrr[11];
int randNumber = 6;
void setup() {
Serial.begin(9600);
}

void loop() {
for (i=0, j=4; i<12; i++){  //Создать массив пинов из 12 чисел
      arr[i] = j;
      j++;
      }
lenarr = sizeof(arr)/sizeof(int); //вычислить длинну массива
for (o = 0; o < lenarr; o++) { // присвоить переменной каждое число из массива
       k=arr[o];
       if (randNumber != k) { //сравнить 
              for (d=0; d<12; d++){ //Создать массив без нужного числа
              arrr[d] = k;
              Serial.print("d=");
              Serial.println(arrr[d]);
              break;
              } //for (d=0; d<12; d++)
        } //if (randNumber != k)
} //for (o = 0; o < lenarr; o++)
delay(3000);
} //void loop()
Последний раз редактировалось rss-999 Вт авг 22, 2023 05:44:14, всего редактировалось 1 раз.
Реклама
Нашел транзистор. Понюхал.
Сообщения: 158
Зарегистрирован: Сб апр 24, 2021 18:42:11

Сообщение phalanx »

[uquote="rss-999",url="/forum/viewtopic.php?p=4465294#p4465294"]...

Код: Выделить всё

// Это и есть массивы
int arr[12];
int arrr[11];
...
[/uquote]
Если нужно что-то с массивом сделать в функции, то выглядит это так:

Код: Выделить всё

void func( int * ptr, int size )
{
        for( int i=0; i < size; i++ )
            ptr[i] = ...;// Как-то работаете с массивом
}
...
int * func2( int * ptr, int size )
{
        for( int i=0; i < size; i++ )
            ptr[i] = ...;// Как-то работаете с массивом

        return ptr; // можно вернуть его-же
}


// И собственно вызов:
func( arr, 12);
arrr = func( func2( arrr, 11 ), 11 ); // Цепочка вызовов
...
Как-то так. Керниган и и Ритчи. Ключевые слова "указатель" и "массив". В сети полно примеров, плохо искали. И собственно Arduino тут не при чем. Не знаю есть-ли это в Arduino, в нативном Си/Си++ можно делать так:

Код: Выделить всё

#define ARR_LENGTH 100;
int *ptr = NULL;              // Обьявляем указатель на int
ptr = (int*) malloc(ARR_LENGTH);  // Динамически создаем массив
// в Си++ можно так:
ptr = new int[ARR_LENGTH];
func( ptr, ARR_LENGTH ); // работаем с ним 
free(ptr); // Освобождаем память
delete[] ptr; // В Си++ после выделения памяти через new
...
Главное не вылетать за размерность массива, все ломается сразу.
Последний раз редактировалось phalanx Пн авг 21, 2023 12:35:57, всего редактировалось 6 раз.
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1430
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

rss-999. Прежде чем вставлять на форум свой скетч, научитесь делать ^T в IDE.
loop() - это что по вашему?
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт авг 15, 2023 06:46:22

Сообщение rss-999 »

[uquote="phalanx",url="/forum/viewtopic.php?p=4465298#p4465298"][uquote="rss-999",url="/forum/viewtopic.php?p=4465294#p4465294"]...

Код: Выделить всё

// Это и есть массивы
int arr[12];
int arrr[11];
...
[/uquote]
Если нужно что-то с массивом сделать в функции, то выглядит это так:

Код: Выделить всё

void func( int * ptr, int size )
{
        for( int i=0; i < size; i++ )
            ptr[i] = ...;// Как-то работаете с массивом
}
...
int * func2( int * ptr, int size )
{
        for( int i=0; i < size; i++ )
            ptr[i] = ...;// Как-то работаете с массивом

        return ptr; // можно вернуть его-же
}


// И собственно вызов:
func( arr, 12);
arrr = func( func2( arrr, 11 ), 11 ); // Цепочка вызовов
...
Как-то так. Керниган и и Ритчи. Ключевые слова "указатель" и "массив". В сети полно примеров, плохо искали. И собственно Arduino тут не при чем. Не знаю есть-ли это в Arduino, в нативном Си/Си++ можно делать так:

Код: Выделить всё

#define ARR_LENGTH 100;
int *ptr = NULL;              // Обьявляем указатель на int
ptr = (int*) malloc(ARR_LENGTH);  // Динамически создаем массив
// в Си++ можно так:
ptr = new int[ARR_LENGTH];
func( ptr, ARR_LENGTH ); // работаем с ним 
free(ptr); // Освобождаем память
delete[] ptr; // В Си++ после выделения памяти через new
...
Главное не вылетать за размерность массива, все ломается сразу.[/uquote]
Большое спасибо, вроде понятно

Добавлено after 2 minutes 33 seconds:
[uquote="OKF",url="/forum/viewtopic.php?p=4465299#p4465299"]rss-999. Прежде чем вставлять на форум свой скетч, научитесь делать ^T в IDE.
loop() - это что по вашему?[/uquote]
Совсем не понимаю что вы хотите сказать. Все слова знакомы, кроме ^T, а общий смысл не складывается)
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

Форматирование кода, вероятно. Ваш читать просто неудобно.
Loop() - это уже функция, то есть, вопрос не имеет смысла.

Цитировать сообщения полностью не требуется (особенно для "Большое спасибо, вроде понятно") и карается правилами. Вы же прочитали правила форума при регистрации.
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Сообщения: 158
Зарегистрирован: Сб апр 24, 2021 18:42:11

Сообщение phalanx »

[uquote="rss-999",url="/forum/viewtopic.php?p=4465312#p4465312"]...
Все слова знакомы, кроме ^T, а общий смысл не складывается)[/uquote]
...
Ctrl+T - Adjust alignment and space
...
https://shortcutworld.com/Arduino/win/Arduino_Shortcuts
:)
Реклама
Ответить

Вернуться в «Arduino»