Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Как передавать массивы в функции в C++: практическое руководство

Передача массивов в функции в C++

Это руководство объясняет, как передавать одномерные и многомерные массивы в функции в C++ с реальными примерами кода.

В C++ массивы можно передавать как аргументы функций, и даже возвращать их косвенно через указатели. Понимание механизма преобразования массива в указатель и влияния на память и производительность необходимо для написания эффективного кода.


Синтаксис передачи массивов как параметров функции

Объявление функции, принимающей массив, выглядит так:

returnType functionName(dataType arrayName[arraySize]) {
    // тело функции
}

Пример:

int total(int marks[5]) {
    // реализация
}

Здесь marks — массив int из пяти элементов. При вызове функции передается только имя массива (указатель на первый элемент).


Пример 1: передача одномерного массива в функцию

#include <iostream>
using namespace std;
// Объявление функции для вывода оценок
void display(int m[5]) {
    cout << "Displaying marks:" << endl;
    for (int i = 0; i < 5; ++i) {
        cout << "Student " << i + 1 << ": " << m[i] << endl;
    }
}
int main() {
    int marks[5] = {88, 76, 90, 61, 69};
    display(marks); // Передача массива по имени
    return 0;
}

Результат

Displaying marks:
Student 1: 88
Student 2: 76
Student 3: 90
Student 4: 61
Student 5: 69

Ключевые моменты:

  1. Вызов display(marks); передает адрес marks[0].
  2. Внутри функции int m[5] трактуется как int* m;, указывающий на ту же память.
  3. Изменение m[i] меняет исходный массив marks, иллюстрируя семантику передачи по ссылке.

Передача многомерного массива в функцию

Для 2-мерных массивов необходимо указать количество столбцов (размер второго измерения), чтобы компилятор мог вычислить смещения элементов.

Пример 2: передача двумерного массива в функцию

#include <iostream>
using namespace std;
void display(int n[][2]) {
    cout << "Displaying values:" << endl;
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 2; ++j) {
            cout << "num[" << i << "][" << j << "]: " << n[i][j] << endl;
        }
    }
}
int main() {
    int num[3][2] = {{3, 4}, {9, 5}, {7, 1}};
    display(num);
    return 0;
}

Результат

Displaying values:
num[0][0]: 3
num[0][1]: 4
num[1][0]: 9
num[1][1]: 5
num[2][0]: 7
num[2][1]: 1

Примечания:

Массивы более высоких размерностей следуют тому же правилу: размеры всех измерений, кроме первого, должны быть указаны.


Возврат массива из функции

Функции не могут возвращать целый массив напрямую. Вместо этого они возвращают указатель на первый элемент, который может ссылаться на статически выделенный массив, динамический массив или временный объект. Нужно быть осторожным, чтобы не возвращать указатели на локальные (стековые) массивы, что привело бы к висячим ссылкам.

Пример (статический массив):

int* getArray() {
    static int arr[5] = {1, 2, 3, 4, 5};
    return arr; // указатель на первый элемент
}

Для динамического выделения рассмотрите возврат std::vector<T> для безопасности и автоматического управления памятью.

Для продакшн-кода рекомендуется дополнительное чтение о безопасной работе с массивами в C++.

Язык C

  1. Зубчатые массивы в C#: объявление, инициализация и доступ
  2. Освоение операторов C++: полное руководство с практическими примерами
  3. Дружественные функции и классы в C++: мастерство контроля доступа
  4. Операторы в C: исчерпывающее руководство
  5. Массивы в C++: объявление, инициализация и работа с указателями
  6. Динамическое выделение массивов в C++: практическое руководство с примерами кода
  7. Перегрузка операторов в C++: практическое руководство с примерами кода
  8. Функции в C++: подробное объяснение с практическими примерами кода
  9. Освоение программирования на C: подробное руководство для начинающих
  10. Перегрузка в C++: функции и операторы — подробное руководство