Шилтемелер жана динамикалык эстутум
Өзгөрмөгө экинчи ат бер, анын дарегин сакта жана эстутумду акылдуу карызга ал
new аркылуу сурап алган жана delete аркылуу кайтарууга милдеттүү болгон кошумча эстутум.
- шилтемени көрсөткүчтөн айырмалай аласың,
- стек менен үймөк кайда жайгашканын түшүндүрө аласың,
newжанаdeleteаркылуу үймөктөгү эстутумду агып кетпей бөлүп жана бошото аласың.
1. Шилтеме — экинчи ат
Шилтеме — бул мурунтан бар өзгөрмөнүн дагы бир аты (псевдоним). Аны жарыялоодо & белгиси менен түзөсүң. Андан кийин шилтеме менен түпнуска — эстутумдагы бир эле уяча: бирин өзгөртсөң, экинчиси да өзгөрөт.
Салыштыруу: сенин атың Александр, бирок үйдө сени «Саша» дешет — эки ат тең бир адамды көрсөтөт. Сашаны тамактандырсаң, Александр да ач эмес, себеби бул бир эле адам.
#include <iostream>
using namespace std;
int main() {
int score = 10;
int& alias = score; // alias is a SECOND name for score
alias = 25; // changing alias changes score
cout << score << endl; // 25
return 0;
}
Күтүлгөн натыйжа: 25. alias — scoreтун экинчи аты болгондуктан, бирине жазуу экөөнө тең жазат. Шилтемеге түзүлгөндө эмнеге шилтегенин сөзсүз берүү керек, кийин аны башка өзгөрмөгө буруп болбойт.
2. Көрсөткүч даректи сактайт
Көрсөткүч — бул мааниси башка өзгөрмөнүн эстутумдагы дареги болгон өзгөрмө. Ал * менен жарыяланат, ал эми даректи & дарек операторунун жардамы менен алат. Ошол даректеги маанини алуу үчүн көрсөткүчтү ачасың, дагы * менен.
Салыштыруу: көрсөткүч — досуңдун үйүнүн дареги жазылган чаптама сыяктуу. Чаптама үй эмес, бирок дарек боюнча үйгө барып, ичиндеги эмеректи да которо аласың.
#include <iostream>
using namespace std;
int main() {
int n = 42;
int* p = &n; // p holds the ADDRESS of n
cout << n << endl; // 42
cout << *p << endl; // 42 (value at that address)
*p = 100; // change n THROUGH the pointer
cout << n << endl; // 100
return 0;
}
Күтүлгөн натыйжа: 42, анан 42, анан 100. Бул жерде &n «n дареги» дегенди, *p «p ичиндеги даректеги маани» дегенди билдирет. Шилтемеден айырмаланып, көрсөткүч бош болушу (nullptr) жана кийин башка өзгөрмөгө көрсөтүшү мүмкүн.