Thread overview
Yapı göstergesini metotda geçirme
Feb 20, 2012
zafer
Feb 21, 2012
zafer
Feb 21, 2012
Salih Dinçer
February 20, 2012

Konu göstergeler ve göstericilerden açılmışken bende aklıma takılanları sorayım dedim :-D

import std.stdio;

void main()
{
   int * gosterge;

   GostergeDegistir(gosterge);

   writefln("-> %s", gosterge);
}

void GostergeDegistir(int * goster)
{
   int yeni = 10;
   goster = &yeni;
}

Buradaki kodda GostergeDegistir() metodu içindeki goster = &yeni; atamasından sonra main içindeki değerinde değişmesini bekliyordum ama öyle olmadı. Göstericilerin metotlara referans olarak geçtiklerini biliyorum, Dolayısıyla burda biraz aklım karıştı, gözümden kaçan bir şeyler var ama bir türlü bulamadım?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 21, 2012

Alıntı (acehreli):

>

Ancak, göstergeler kendileri referans türü değillerdir. :) GostergeDegistir() içindeki goster, main içindeki gosterge'nin bir kopyasıdır. GostergeDegistir()'e girildiğinde null'ı gösteren iki gösterge oluyor. Bunlardan yalnızca goster değiştiriliyor. Bundan main'dekinin haberi olmuyor.

Anladım Ali teşekkürler. Denemelerim sonucu doğrusu bende göstericilerin kopyalanarak geçirildikleri sonucuna varmıştım ama bu konudaki yetersiz bilgim ve göstericilerin referanslarla hep iç içe olmaları, bunun yanında birde gösterici zaten bir adresi gösteriyor, bunu kopyalasanda yine aynı adresi gösterecektir düşüncesi kafamı karıştırıyordu.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 21, 2012

Ali hocam, biri alıntı olmak üzere iki cevap vermenin bir esprisi var mı? Bir kere daha gördümüştüm ve bakıyorum içerik sanki aynı...:)

Zafer sayende bir şey daha öğrendik. Bahsedilen şeyi denedim hakkaten öyle ve ne hikmetse geriye doğru adreslenmiş. Sanırım derleyici alttan başlayarak adresleme yapıyor olmalı?

Ben de ref kullanmayı denedim adresler aynıydı. Peki main () içinde *gosterge'nin gösterdiği 10 değerini ekrana yazmak mümkün mü, beceremedim de! Üstelik adresler de aynı, sonuçlara gelince...

Bu ref'den önce ki çıktı:

'main()-> BF9DFDFC
sub()-> BF9DFDF0'

Deneme kodu ise şöyle:

: : :
  writefln("main()-> %s", &gosterge);
}

void GostergeDegistir(ref int * goster)
{
   int yeni = 10;

   writefln("sub()-> %s", &goster);
   goster = &yeni;
}

Başarılar...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 21, 2012

Alıntı (zafer):

>

Göstericilerin metotlara referans olarak geçtiklerini biliyorum

Göstergeler C'den beri referans kavramının kendisini gerçekleştirmek için kullanılırlar. Hatta mikro işlemci yazmaçlarında da gerçekleştirilmiş oldukları için aslında C'nin donanımı ifade edişinin bir etkisidir.

Evet, C++'ın referansları da perde arkasında göstergelerle gerçekleştirilmişlerdir.

Ancak, göstergeler kendileri referans türü değillerdir. :) GostergeDegistir() içindeki goster, main içindeki gosterge'nin bir kopyasıdır. GostergeDegistir()'e girildiğinde null'ı gösteren iki gösterge oluyor. Bunlardan yalnızca goster değiştiriliyor. Bundan main'indekinin haberi olmuyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 21, 2012

Alıntı (Salih Dinçer):

>

Ali hocam, biri alıntı olmak üzere iki cevap vermenin bir esprisi var mı? Bir kere daha gördümüştüm ve bakıyorum içerik sanki aynı...:)

Herhalde 'Değiştir'e tıklamak yerine hemen yanındaki 'Alıntı yap'a tıklamışım. :blush: İkinciyi sildim.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]