Итоги: Обход массива через указатели
Часть раздела Logic & Flow путешествия по C на Coddy — урок 11 из 63.
Задание
ЛегкоНапишите программу на языке C, которая реализует функцию для вычисления суммы всех элементов целочисленного массива с использованием арифметики указателей и эквивалентности массивов и указателей. Ваша программа должна:
- Создать функцию с именем
calculateSum, которая принимает два параметра:- Указатель на целое число (
int *arr), представляющий массив - Целое число (
size), представляющее количество элементов в массиве
- Указатель на целое число (
- Внутри функции
calculateSum:- Инициализировать переменную
sumзначением 0 - Создать переменную-указатель
ptrи установить её так, чтобы она указывала на начало массива - Использовать цикл для обхода массива с помощью арифметики указателей
- На каждой итерации прибавлять значение, на которое указывает
ptr, кsum - Инкрементировать указатель для перехода к следующему элементу
- Вернуть вычисленную сумму
- Инициализировать переменную
- В функции
main:- Считать целое число
n, представляющее размер массива - Объявить целочисленный массив размера
n - Считать
nцелых чисел из входных данных для заполнения массива - Вызвать функцию
calculateSum, передав ей массив и его размер - Вывести результат в формате: "Sum: [value]"
- Считать целое число
Функция должна использовать арифметику указателей для обхода массива — не используйте индексацию массива вида arr[i]. Вместо этого используйте разыменование указателя и операции инкремента для доступа к элементам массива.
Например, если входные данные:
5
10 20 30 40 50Ваш вывод должен быть:
Sum: 150Эта задача проверяет ваше понимание того, как функции могут принимать массивы в качестве параметров-указателей, как использовать арифметику указателей для эффективного обхода массивов и как имена массивов автоматически преобразуются в указатели при передаче в функции.
Попробуйте сами
#include <stdio.h>
// TODO: Напишите здесь вашу функцию calculateSum
int main() {
int n;
scanf("%d", &n);
int arr[n];
// Чтение элементов массива
for(int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// TODO: Вызовите функцию calculateSum и сохраните результат
// TODO: Выведите результат в формате "Sum: [value]"
return 0;
}Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции