reference to pointer
Főnév
reference to pointer (tsz. reference to pointers)
- (informatika) A referencia pointerre (reference to pointer) C++-ban egy olyan mechanizmus, amely lehetővé teszi, hogy egy függvény módosítsa a pointert, nem csak az általa mutatott adatot.
🔹 Hogyan működik?
Ha egy függvény egy normál pointert vesz át paraméterként, akkor az a függvény lokális másolata lesz. Az eredeti pointer nem változik. Ha viszont referenciaként (*&) adjuk át, akkor a függvény közvetlenül módosíthatja az eredeti pointert.
🔹 Példa normál pointerrel (NEM MŰKÖDIK HELYESEN)
#include <iostream>
void changePointer(int* ptr) {
int newValue = 100;
ptr = &newValue; // Csak a lokális másolatot változtatja
}
int main() {
int num = 10;
int* p = #
changePointer(p); // Nem változtatja meg az eredeti 'p' értékét!
std::cout << "Érték: " << *p << std::endl; // Még mindig 10!
return 0;
}
❌ Hiba: A p pointer nem módosult, mert a függvény csak a lokális másolatát változtatta meg.
🔹 Referencia pointerre (HELYES MEGOLDÁS)
#include <iostream>
void changePointer(int*& ptr) { // Referenciaként vesszük át a pointert!
int newValue = 100;
ptr = &newValue; // Most a valódi pointert változtatja
}
int main() {
int num = 10;
int* p = #
changePointer(p); // Most már megváltozik az eredeti 'p'
std::cout << "Érték: " << *p << std::endl; // Várhatóan 100, de veszélyes lehet!
return 0;
}
⚠️ Probléma: A newValue lokális változó, így a függvény visszatérte után érvénytelen lesz! Ez függő mutatót (dangling pointer) eredményezhet.
🔹 Helyes alkalmazás dinamikus memóriával
Ha dinamikusan foglalunk memóriát, az helyesen működik:
#include <iostream>
void allocateMemory(int*& ptr) {
ptr = new int(100); // Új memóriaterület foglalása
}
int main() {
int* p = nullptr; // Kezdetben null mutató
allocateMemory(p); // Most p egy érvényes címre mutat
std::cout << "Érték: " << *p << std::endl; // 100
delete p; // Felszabadítás!
return 0;
}
✅ Most a függvény sikeresen megváltoztatta a pointer értékét és egy új memóriaterületre mutat.
🔹 Összegzés
| Normál pointer paraméter | Referencia pointerre (*&) | |
|---|---|---|
| Pointer módosítása a függvényen belül | ❌ Nem módosítja az eredeti pointert | ✅ Módosítja az eredeti pointert |
| Használható dinamikus memóriafoglalásra | ❌ Nem lehet az eredeti pointert egy új memóriaterületre állítani | ✅ A pointer mutathat új memóriafoglalásra |
| Függő mutatók veszélye | ⚠️ Ha lokális változóra mutatunk, érvénytelen lesz | ⚠️ Ugyanúgy lehet veszélyes, ha nem szabadítjuk fel a memóriát |
Ha a cél a pointer értékének módosítása egy függvényen belül, akkor referenciaként (*&) kell átadni.
- reference to pointer - Szótár.net (en-hu)
- reference to pointer - Sztaki (en-hu)
- reference to pointer - Merriam–Webster
- reference to pointer - Cambridge
- reference to pointer - WordNet
- reference to pointer - Яндекс (en-ru)
- reference to pointer - Google (en-hu)
- reference to pointer - Wikidata
- reference to pointer - Wikipédia (angol)