Курс — «Программирование на C для начинающих». Указатели. #21 Арифметика указателей
Здравствуйте, дорогие друзья.
Арифметика указателей — это мощный инструмент, который позволяет выполнять операции с адресами памяти. Она особенно полезна при работе с массивами и динамическими структурами данных. В этом разделе мы рассмотрим основные операции арифметики указателей и примеры их использования.
Основные операции
- Инкремент и декремент:
- Инкремент (
++
): Увеличивает указатель на размер типа данных, на который он указывает. - Декремент (
--
): Уменьшает указатель на размер типа данных, на который он указывает.
- Инкремент (
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <stdio.h> int main() { int arr[5] = {10, 20, 30, 40, 50}; int *ptr = arr; // указатель на первый элемент массива printf("Значение, на которое указывает ptr: %d\n", *ptr); // 10 ptr++; // перемещаем указатель на следующий элемент printf("Значение, на которое указывает ptr после инкремента: %d\n", *ptr); // 20 ptr--; // перемещаем указатель на предыдущий элемент printf("Значение, на которое указывает ptr после декремента: %d\n", *ptr); // 10 return 0; } |
2. Сложение и вычитание:
- Сложение (
+
): Добавляет целое число к указателю, увеличивая его на размер типа данных, умноженный на это число. - Вычитание (
-
): Вычитает целое число из указателя, уменьшая его на размер типа данных, умноженный на это число.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <stdio.h> int main() { int arr[5] = {10, 20, 30, 40, 50}; int *ptr = arr; // указатель на первый элемент массива printf("Значение, на которое указывает ptr: %d\n", *ptr); // 10 ptr = ptr + 2; // перемещаем указатель на два элемента вперед printf("Значение, на которое указывает ptr после сложения: %d\n", *ptr); // 30 ptr = ptr - 1; // перемещаем указатель на один элемент назад printf("Значение, на которое указывает ptr после вычитания: %d\n", *ptr); // 20 return 0; } |
Разность указателей:
- Разность (
-
): Вычисляет количество элементов между двумя указателями. Это полезно для определения размера массива или подмассива.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <stdio.h> int main() { int arr[5] = {10, 20, 30, 40, 50}; int *ptr1 = arr; // указатель на первый элемент массива int *ptr2 = arr + 4; // указатель на последний элемент массива int diff = ptr2 - ptr1; // разность указателей printf("Количество элементов между ptr1 и ptr2: %d\n", diff); // 4 return 0; } |
Важные моменты
- Типы данных: Арифметика указателей зависит от типа данных, на который указывает указатель. Например, если указатель указывает на
int
, то инкремент указателя увеличит его на размерint
(обычно 4 байта). - Границы массива: Всегда следите за тем, чтобы указатель не выходил за границы массива. Доступ к памяти за пределами массива может привести к неопределенному поведению и ошибкам.
- NULL указатели: Не выполняйте арифметические операции с указателями, которые имеют значение
NULL
. Это может привести к ошибкам времени выполнения.
Арифметика указателей — это мощный инструмент, который позволяет эффективно работать с массивами и динамическими структурами данных. Понимание основ арифметики указателей является ключевым для успешного программирования на C.
На этом все. Всем хорошего дня!