Menu
Coddy logo textTech

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

Часть раздела Logic & Flow путешествия по C на Coddy — урок 29 из 63.

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

Это означает, что когда вы записываете параметр функции как int arr[] или int *arr, оба варианта эквивалентны — они оба представляют собой указатель на первый элемент массива. Функция получает адрес памяти, с которого начинается массив, что дает ей прямой доступ к данным исходного массива.

void printArray(int arr[], int size) {
    // arr на самом деле является указателем на первый элемент
    // Функция может получать доступ к исходному массиву и изменять его
}

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

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

challenge icon

Задание

Легко

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

  1. Создать функцию с именем analyzeTemperatures, которая принимает целочисленный массив и его размер в качестве параметров
  2. Внутри функции analyzeTemperatures вычислить и вывести среднюю температуру ровно с 1 десятичным знаком в формате: Average temperature: [value]
  3. Внутри функции analyzeTemperatures найти и вывести самую высокую температуру в формате: Highest temperature: [value]
  4. Внутри функции analyzeTemperatures подсчитать, сколько температур превышает 25 градусов, и вывести это количество в формате: Days above 25 degrees: [count]
  5. В функции main прочитать целое число n, представляющее количество показаний температуры
  6. Прочитать n значений температуры и сохранить их в целочисленном массиве
  7. Вызвать функцию analyzeTemperatures, передав ей массив и его размер

Ваша программа должна обработать данные о температуре и отобразить результаты анализа. Например, если на вход подается:

5
20 28 15 32 26

Ваш вывод должен быть следующим:

Average temperature: 24.2
Highest temperature: 32
Days above 25 degrees: 3

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

Шпаргалка

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

И int arr[], и int *arr являются эквивалентными параметрами функции — они представляют собой указатель на первый элемент:

void printArray(int arr[], int size) {
    // arr на самом деле является указателем на первый элемент
    // Функция может обращаться к исходному массиву и изменять его
}

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

  • Функции получают адрес памяти, где начинается массив
  • Изменения, внесенные внутри функции, влияют на исходный массив
  • Размер массива должен передаваться как отдельный параметр, так как функция не может определить длину только по указателю

Попробуйте сами

#include <stdio.h>

// TODO: Создайте здесь функцию analyzeTemperatures

int main() {
    // Считать количество показаний температуры
    int n;
    scanf("%d", &n);
    
    // Объявить массив для хранения температур
    int temperatures[n];
    
    // Считать значения температуры
    for (int i = 0; i < n; i++) {
        scanf("%d", &temperatures[i]);
    }
    
    // TODO: Вызовите здесь функцию analyzeTemperatures
    
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow