Sefer Algan'ın Günlüğü

Günlüğüme hoşgeldiniz...

Pointer(Gösterici)'lar ve C#'ta string değişkenler.

Bir okurumdan gelen soruyu ve ona yazdigim cevabi sizlerle paylasiyorum.

Soru : C# ta tanimlanan string degiskenlerinin immutable yani bir kere tanimlandiginda içeriginin asla degistirilemeyecegini duydum. Ancak C#'ta pointer kullanarak aynen C de oldugu gibi tanimlanan string degiskenlerinin içerigini degistrmem mümkün mü acaba?

Cevap : Evet mümkün, bunun için unsafe kod bloklari kullanmaniz gerekir. Ayni zamanda fixed anahtar sözcügünü de kullanmaniz gerekir. Çünkü string bir referans türüdür ve bellekteki adrese GC tarafindan her an degistirilebilir. fixed anahtar sözcügü bunu engellemek için kullanilir. Pointerlari kullanarak string degiskenlerin bu davranisini asagidaki sekilde bozabiliriz.

unsafe static void Main()
{
    
string str = "Normal yöntemlerle asla degistiremedigimiz string";
    
fixed(char* ptr = str)
    
{
          
for(int i=0; ptr[i] != '\0'; ++i)
             
*(ptr+i) = 'X';
    
}
    
Console.WriteLine(str)
}

Ayni degiskeni ekrana yazdirdigimizda ekrana ""XXXXX..." yazdigini göreceksiniz. Sanirim bu örnek bile pointer larin gücünü göstermeye yeter.

Comments

sefer said:

ben programlarimda

string str = null

str = "Normal yöntemlerle asla degistiremedigimiz string";

seklinde bir sey tanimlayip sonrada sonuna karakter ekledigimi veya

str = ""

yapip baska degerler atadigimi hatirliyorum. bunlar nasil oluyor
# August 2, 2005 2:53 PM

sefer said:

Görünürde yapiyorsunuz zaten ancak siz yapabildiginizi zannediyorsunuz, çunku arka planda yeni bir string degiskeni tanimlaniyor ve eski deger bu yeni yere kopyalaniyor (tabi yaptiginiz eklemelerle birlikte)
# August 2, 2005 9:14 PM
Leave a Comment

(required) 

(required) 

(optional)

(required)