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

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

Добавлено: Пн авг 21, 2023 11:59:27
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()

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

Добавлено: Пн авг 21, 2023 12:19:32
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
...
Главное не вылетать за размерность массива, все ломается сразу.

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

Добавлено: Пн авг 21, 2023 12:20:41
OKF
rss-999. Прежде чем вставлять на форум свой скетч, научитесь делать ^T в IDE.
loop() - это что по вашему?

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

Добавлено: Пн авг 21, 2023 13:23:57
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, а общий смысл не складывается)

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

Добавлено: Пн авг 21, 2023 13:29:15
Martian
Форматирование кода, вероятно. Ваш читать просто неудобно.
Loop() - это уже функция, то есть, вопрос не имеет смысла.

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

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

Добавлено: Вт авг 22, 2023 01:08:46
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
:)