Bunu zaten bildiğimiz gibi 'işaretçi nedir' Bir işaretçi, başka bir değişkenin adresini saklayan bir değişkendir. Başvuru operatörü aynı zamanda (*) ile temsil edilen dolaylı operatör olarak da bilinir. İşaretçi değişkeniyle birlikte dolaylılık operatörü (*) kullanıldığında buna şu ad verilir: bir işaretçinin referansının kaldırılması. Bir işaretçinin referansını kaldırdığımızda, bu işaretçinin işaret ettiği değişkenin değeri döndürülecektir.
Referans kaldırma işaretçisini neden kullanıyoruz?
Bir işaretçinin referansı aşağıdaki nedenlerden dolayı kullanılır:
- İşaretçinin işaret ettiği bellek konumunda depolanan verilere erişmek veya bunları değiştirmek için kullanılabilir.
- Referansı alınmış işaretçiye uygulanan herhangi bir işlem, işaret ettiği değişkenin değerini doğrudan etkileyecektir.
Bir işaretçinin referansını kaldırmak için aşağıdaki adımları izleyelim.
css'de arka plan olarak resim
- Öncelikle işaretçinin işaret ettiği tamsayı değişkenini bildiririz.
int x =9;
- Şimdi tamsayı işaretçi değişkenini bildiriyoruz.
int *ptr;
- Bir tamsayı işaretçi değişkeninin bildiriminden sonra, 'x' değişkeninin adresini 'ptr' işaretçi değişkenine saklıyoruz.
ptr=&x;
- Aşağıda gösterildiği gibi 'ptr' işaretçisinin referansını kaldırarak 'x' değişkeninin değerini değiştirebiliriz:
*ptr =8;
Yukarıdaki satır 'x' değişkeninin değerini 9'dan 8'e değiştirir çünkü 'ptr' 'x' konumunu işaret eder ve 'ptr'nin referansının kaldırılması, yani *ptr=8 x'in değerini günceller.
Yukarıdaki adımların tümünü birleştirelim:
#include int main() { int x=9; int *ptr; ptr=&x; *ptr=8; printf('value of x is : %d', x); return 0;}
Çıktı
hackleme işlemi
Başka bir örneği ele alalım.
#include int main() { int x=4; int y; int *ptr; ptr=&x; y=*ptr; *ptr=5; printf('The value of x is : %d',x); printf(' The value of y is : %d',y); return 0; }
Yukarıdaki kodda:
- 'x'in '4' değerini tuttuğu iki değişken 'x' ve 'y' bildiririz.
- Bir işaretçi değişkeni 'ptr' bildiririz.
- Bir işaretçi değişkeninin bildiriminden sonra 'x' değişkeninin adresini 'ptr' işaretçisine atarız.
- 'Ptr'nin 'x' değişkeninin adresini içerdiğini bildiğimiz için '*ptr', 'x' ile aynıdır.
- 'x' değerini 'ptr' değişkeni yardımıyla 'y'ye atarız yani y=* ptr 'x' değişkenini kullanmak yerine.
Not: Bize göre 'x'in değerini değiştirirsek 'ptr' işaretçisi 'x' değişkeninin adresini tuttuğu için 'y'nin değeri de değişecektir. Ancak 'y', '5' değerinin yerel kopyasını sakladığından bu gerçekleşmez.
Çıktı
Başka bir senaryoyu ele alalım.
#include int main() { int a=90; int *ptr1,*ptr2; ptr1=&a; ptr2=&a; *ptr1=7; *ptr2=6; printf('The value of a is : %d',a); return 0; }
Yukarıdaki kodda:
- İlk önce bir 'a' değişkeni tanımlıyoruz.
- Daha sonra ptr1 ve ptr2 gibi iki işaretçi bildiririz.
- Her iki işaretçi de 'a' değişkeninin adresini içerir.
- *ptr1'e '7' değerini, *ptr2'ye ise '6' değerini atadık. 'a'nın son değeri '6' olacaktır.
Not: Aynı konuma işaret eden birden fazla işaretçimiz varsa, bir işaretçinin yaptığı değişiklik diğer işaretçiyle aynı olacaktır.
Çıktı
Linux'ta klasörü yeniden adlandırma