Selam;
Ben C++'da işaretçiler kullanarak şöyle bir reverse fonksiyonu yazdım:
void reverse(int* n1, int* n2)
{
if (*n1 > *n2)
{
int tmp = *n1;
*n1 = *n2;
*n2 = tmp;
}
}
int main()
{
int n1 = 5;
int n2 = 3;
reverse(&n1, &n2);
cout << "n1 = " << n1 << endl
<< "n2 = " << n2 << endl;
return 0;
}
Bu kod çıktıda şu sonucu veriyor: n1 = 3, n2 = 5.
reverse fonksiyonunu şöyle değiştirdiğimde sonuç n1 = 5, n2 = 3 oluyor yani değişkenlerin değerleri değişmiyor.
void reverse(int* n1, int* n2)
{
if (*n1 > *n2)
{
int* tmp = n1;
n1 = n2;
n2 = tmp;
}
}
int main()
{
int n1 = 5;
int n2 = 3;
reverse(&n1, &n2);
cout << "n1 = " << n1 << endl
<< "n2 = " << n2 << endl;
return 0;
}
Fakat bu mantık bana doğru geliyor çünkü işaretçilerin değerleriyle oynamak yerine adresleriyle oynayıp birbirlerinin değerlerini almalarını bekliyordum. Buradaki mantık nedir? Adreslerini değiştirdikten sonra adreslerini ekrana yazdırıyorum ve adreslerin birbirleriyle değiştirildiğini görüyorum ama değerler değişmiyor, sonuçta değerler de o adreslerde tutuluyor.
Teşekkürler!
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]