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

Указатели в C++: концепции, примеры и практические применения

Что такое указатели?

Указатель в C++ — это переменная, хранящая адрес в памяти другой переменной. Тип указателя должен совпадать с типом данных, на которые он ссылается. Например, int* может хранить только адреса объектов типа int.

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

Понимание адресов памяти

Каждой переменной выделяется уникальное место в ОЗУ. Оператор взятия адреса & возвращает этот адрес. Для переменной x выражение &x даёт её местоположение в памяти.

Синтаксис объявления указателя

Объявления следуют шаблону:

тип *имя_указателя;

Примеры:

int *p;      // указатель на int
double *d;   // указатель на double
char *c;     // указатель на char

Оператор взятия адреса (&) и разыменования (*)

Оператор & даёт адрес переменной; оператор * получает значение по этому адресу.

#include <iostream>
using namespace std;
int main() {
    int x = 27;
    int *ip = &x;
    cout << "Value of x: " << x << endl;
    cout << "Address of x: " << ip << endl;
    cout << "Value via pointer: " << *ip << endl;
    return 0;
}

Вывод:

Value of x: 27
Address of x: 0x7ffeefbff5ac
Value via pointer: 27

Указатели и массивы

Имя массива преобразуется в указатель на его первый элемент. Поэтому:

int arr[5];
int *p = arr;      // правильно
int *q = &arr;     // неправильно — &arr даёт адрес всего массива, не первого элемента

Использование указателя для перебора массива:

#include <iostream>
using namespace std;
int main() {
    int *p;
    int arr[] = {10, 34, 13, 76, 5, 46};
    p = arr;
    for (int i = 0; i < 6; ++i) {
        cout << *p++ << endl;
    }
    return 0;
}

Вывод:

10
34
13
76
5
46

Нулевые указатели

Когда у указателя нет валидной цели, его следует инициализировать NULL (или nullptr в C++11 и новее). Это предотвращает случайное разыменование.

#include <iostream>
using namespace std;
int main() {
    int *ip = nullptr;
    cout << "ip = " << ip << endl; // печатает 0
    return 0;
}

Использование указателей в функциях

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

#include <iostream>
using namespace std;
void modify(int *p1, int *p2) {
    *p1 = 10;
    *p2 = 11;
}
int main() {
    int a = 5, b = 5;
    cout << "Before: a=" << a << ", b=" << b << endl;
    modify(&a, &b);
    cout << "After: a=" << a << ", b=" << b << endl;
    return 0;
}

Вывод:

Before: a=5, b=5
After: a=10, b=11

Преимущества указателей

Краткое резюме

Язык C

  1. Массивы в C++: объявление, инициализация и работа с указателями
  2. Цикл do-while в C++: синтаксис, примеры и вложенные циклы
  3. Указатели в C++: концепции, примеры и практические применения
  4. Тип данных char в C++: объявление, ASCII и методы преобразования
  5. Перегрузка операторов в C++: практическое руководство с примерами кода
  6. Структуры (struct) в C++: объяснение с практическим примером
  7. Освоение std::list в C++: синтаксис, функции и практические примеры
  8. Функции в C++: подробное объяснение с практическими примерами кода
  9. Коллекции в C#: практическое руководство с реальными примерами
  10. Указатели в C: полное руководство по типам, использованию и лучшим практикам