Darkstar
18/11/2004, 19:24
Geçenlerde karşılaştığım ve C++ kitaplarında pek üzerinde durulmayan önemli bir konu üzerindeki bilgilerimi sizlerle paylaşmak istedim:
Bildiğiniz gibi bir pointer'ı herhangi bir fonksiyona parametre olarak tanımlarsanız aslında o pointer için fonksiyon içinde bir kopya oluşturmuş oluyorsunuz.
//global bir pointerımız olsun...
int *ptrglob;
void func(int* p)
{
p = ptrglob;
}
main()
{
ptrglob = new int(66);
int *x;
int y = 33;
x = &y;
func(x);
cout<<*x; // Çıktı: 33 !
}
Bunun nedeni parametre olarak gönderdiğiniz pointerın fonks. içinde lokal bir kopyasının oluşturulmuş olmasıdır. Eğer fonksiyon içinde pointerı değiştirmek istiyorsanız aşağıdaki gibi pointera referans olarak tanımlamalısınız:
void func(int* &p)
{
p = ptrglob;
}
main()
{
ptrglob = new int(66);
int *x;
int y = 33;
x = &y;
func(x);
cout<<*x; // Çıktı: 66...
}
Bu bir çözüm, bir başka çözüm de fonksiyona parametre olarak pointera pointer kullanmanız:
void func(int** p)
{
*p = ptrglob;
}
main()
{
ptrglob = new int(66);
int *x;
int y = 33;
x = &y;
func(x);
cout<<*x; // Çıktı: 66...
}
Bildiğiniz gibi bir pointer'ı herhangi bir fonksiyona parametre olarak tanımlarsanız aslında o pointer için fonksiyon içinde bir kopya oluşturmuş oluyorsunuz.
//global bir pointerımız olsun...
int *ptrglob;
void func(int* p)
{
p = ptrglob;
}
main()
{
ptrglob = new int(66);
int *x;
int y = 33;
x = &y;
func(x);
cout<<*x; // Çıktı: 33 !
}
Bunun nedeni parametre olarak gönderdiğiniz pointerın fonks. içinde lokal bir kopyasının oluşturulmuş olmasıdır. Eğer fonksiyon içinde pointerı değiştirmek istiyorsanız aşağıdaki gibi pointera referans olarak tanımlamalısınız:
void func(int* &p)
{
p = ptrglob;
}
main()
{
ptrglob = new int(66);
int *x;
int y = 33;
x = &y;
func(x);
cout<<*x; // Çıktı: 66...
}
Bu bir çözüm, bir başka çözüm de fonksiyona parametre olarak pointera pointer kullanmanız:
void func(int** p)
{
*p = ptrglob;
}
main()
{
ptrglob = new int(66);
int *x;
int y = 33;
x = &y;
func(x);
cout<<*x; // Çıktı: 66...
}