Указатели и адреса
Указатель содержит адрес объекта совместимого типа.
Что такое Указатели и адреса?
Указатель содержит адрес объекта совместимого типа.
Сохраните адрес, разыменуйте его и измените исходный объект.
Важные моменты
- Указатель ссылается на живой совместимый объект или равен null.
- Каждое собственное выделение освобождается ровно один раз.
- Явно выражайте ownership и const.
Примеры кода на C и C++
main.c
#include <stdio.h>
int main(void) {
int score = 70;
int *score_ptr = &score;
*score_ptr += 5;
printf("score=%d same-address=%s\n", score,
score_ptr == &score ? "yes" : "no");
return 0;
}
score=75 same-address=yes
C++
main.cpp
#include <iostream>
int main() {
int score = 70;
int* score_ptr = &score;
*score_ptr += 5;
std::cout << "score=" << score << " same-address="
<< std::boolalpha << (score_ptr == &score) << '\n';
}
score=75 same-address=true
Сравнение C и C++
C напрямую использует raw pointer. C++ сохраняет их для non-owning доступа, но предпочитает ссылку, когда null не нужен.
C
Ownership и очистка — соглашения, контролируемые программистом.
C++
Контейнеры и RAII связывают ownership и очистку с lifetime объекта.
Практические задания
Запустите обе версии и изменяйте их, сравнивая гарантии языков.
- Проверьте null и отказ выделения памяти.
- Используйте AddressSanitizer и UndefinedBehaviorSanitizer.
- Документируйте ownership каждого указателя.