Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

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

Пн авг 21, 2023 11:59:27

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

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 раз.

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

Пн авг 21, 2023 12:19:32

...
Код:
// Это и есть массивы
int arr[12];
int arrr[11];
...

Если нужно что-то с массивом сделать в функции, то выглядит это так:
Код:
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 раз(а).

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

Пн авг 21, 2023 12:20:41

rss-999. Прежде чем вставлять на форум свой скетч, научитесь делать ^T в IDE.
loop() - это что по вашему?

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

Пн авг 21, 2023 13:23:57

...
Код:
// Это и есть массивы
int arr[12];
int arrr[11];
...

Если нужно что-то с массивом сделать в функции, то выглядит это так:
Код:
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
...

Главное не вылетать за размерность массива, все ломается сразу.

Большое спасибо, вроде понятно

Добавлено after 2 minutes 33 seconds:
rss-999. Прежде чем вставлять на форум свой скетч, научитесь делать ^T в IDE.
loop() - это что по вашему?

Совсем не понимаю что вы хотите сказать. Все слова знакомы, кроме ^T, а общий смысл не складывается)

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

Пн авг 21, 2023 13:29:15

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

Цитировать сообщения полностью не требуется (особенно для "Большое спасибо, вроде понятно") и карается правилами. Вы же прочитали правила форума при регистрации.

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

Вт авг 22, 2023 01:08:46

...
Все слова знакомы, кроме ^T, а общий смысл не складывается)

...
Ctrl+T - Adjust alignment and space
...
https://shortcutworld.com/Arduino/win/Arduino_Shortcuts
:)
Ответить