Работа с указателями на структуры в 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;
}