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.
Posted
Jun 27 2005, 01:37 AM
by
sefer