Работа с указателями на структуры в C++ имеет свои особенности. Указатели на структуры позволяют работать с объектами структур через их адреса, что может быть полезно для динамического выделения памяти, передачи больших структур в функции без копирования и других задач.
Создание и использование указателей на структуры
- 
Объявление указателя: Person *p;
- 
Присваивание адреса существующего объекта: Person person; p = &person;
- 
Доступ к членам структуры через указатель: Используйте оператор ->для доступа к членам структуры через указатель.p->name = "John"; p->age = 30;
- 
Динамическое выделение памяти для структуры: Используйте оператор newдля создания структуры в динамической памяти.Person *p = new Person; p->name = "John"; p->age = 30;
- 
Освобождение памяти: Используйте оператор deleteдля освобождения памяти, выделенной операторомnew.delete p;
Пример:
#include <iostream>
using namespace std;
 
struct Person {
    string name;
    int age;
 
    Person() : name("Unknown"), age(0) {}
    Person(string n, int a) : name(n), age(a) {}
 
    void display() const {
        cout << "Name: " << name << ", Age: " << age << endl;
    }
};
 
int main() {
    // Статическое создание объекта и указателя на него
    Person person1("Alice", 28);
    Person *p1 = &person1;
 
    p1->display(); // Использование указателя для вызова метода
 
    // Динамическое создание объекта
    Person *p2 = new Person("Bob", 35);
 
    p2->display(); // Использование указателя для вызова метода
 
    // Освобождение памяти
    delete p2;
 
    return 0;
}Особенности
- Оператор ->используется для доступа к членам структуры через указатель.
- Динамическое выделение памяти требует явного освобождения памяти с помощью delete.
- Указатели могут быть переданы в функции, что позволяет работать с большими структурами без их копирования.
Передача указателя в функцию:
void updateName(Person *p, const string &newName) {
    p->name = newName;
}
 
int main() {
    Person person("John", 30);
    updateName(&person, "Jack");
    person.display(); // Name: Jack, Age: 30
    return 0;
}