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

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

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

В этом руководстве объясняется, как передавать целые массивы — как одномерные, так и многомерные — в функции на языке C, с понятными примерами кода и рекомендациями по лучшим практикам.

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


Передача отдельных элементов массива

Передача отдельного элемента ничем не отличается от передачи любого примитивного типа.

Пример 1: Передача отдельных элементов массива

#include <stdio.h>
void display(int age1, int age2) {
    printf("%d\n", age1);
    printf("%d\n", age2);
}
int main() {
    int ageArray[] = {2, 8, 4, 12};
    // Передаем второй и третий элементы в display()
    display(ageArray[1], ageArray[2]);
    return 0;
}

Вывод

8
4

Здесь мы передаем ageArray[1] и ageArray[2] как обычные переменные. Функция получает их по значению, поэтому исходный массив остается неизменным.


Передача целых одномерных массивов

Чтобы передать весь массив в функцию, достаточно указать имя массива. Прототип функции должен указывать параметр-массив, но фактический размер можно опустить. Компилятор рассматривает параметр как указатель на первый элемент.

Пример 2: Вычисление суммы элементов массива

#include <stdio.h>
float calculateSum(float num[]);
int main() {
    float result, num[] = {23.4, 55, 22.6, 3, 40.5, 18};
    // Передаем весь массив в calculateSum()
    result = calculateSum(num);
    printf("Result = %.2f", result);
    return 0;
}
float calculateSum(float num[]) {
    float sum = 0.0;
    for (int i = 0; i < 6; ++i) {
        sum += num[i];
    }
    return sum;
}

Вывод

Result = 162.50

Сигнатура функции float calculateSum(float num[]) сообщает компилятору, что num — это указатель на массив float. Цикл обрабатывает массив на месте без копирования.


Передача многомерных массивов

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

Пример 3: Передача двумерного массива

#include <stdio.h>
void displayNumbers(int num[2][2]);
int main() {
    int num[2][2];
    printf("Введите 4 числа:\n");
    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 2; ++j) {
            scanf("%d", &num[i][j]);
        }
    }
    // Передаем двумерный массив в функцию
    displayNumbers(num);
    return 0;
}
void displayNumbers(int num[2][2]) {
    printf("Вывод:\n");
    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 2; ++j) {
            printf("%d\n", num[i][j]);
        }
    }
}

Вывод

Введите 4 числа:
2 3 4 5
Вывод:
2
3
4
5

Прототип функции void displayNumbers(int num[2][2]) объявляет целочисленный массив 2×2. При вызове функции мы просто передаем num; компилятор автоматически обрабатывает преобразование указателя.

Обратите внимание: размер строки можно опустить, но размер столбца обязателен: int num[][2] — допустимо, тогда как размер столбца необходим для вычисления адресов.


Важно: C позволяет передавать массивы в функции, но не поддерживает возврат массивов из функций напрямую. Используйте указатели или структуры, если нужно вернуть сложные данные.

Язык C

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