noimage

İçeriği Paylaş:

Pointer (gösterici, işaretçi)

  1. Pointer (gösterici, işaretçi)

1.1. Tanımlanması ve KullanımıBir veri bloğunun bellekte bulunduğu adresi içeren (gösteren) veritipidir. Tanımlama biçimi:veri tipi *p;p değişkeni <veri tipi> ile belirtilen tipte bir verinin bellekte saklandığıadresi içerir.int *iptr;float *fptr;Bu kadar tanımla sonucunda bellekte p değişkeni mevcuttur.Ancak işaret ettiği veri bloğu yoktur. Bunun için iki yol vardır. Birincisikullanılan herhangi bir değişkeni işaret etmek, ikincisi ise veri bloğunuboş belleği kullanarak oluşturmak.    1.  İşaretçi değişkenin var olan bir değişkenin bulunduğu adresi göstermesi.Bu işlemi yapabilmek için var olan değişkenin adresinin bilinmesigerekmektedir.& operatörü : Bir değişkenin adresinin belirlenmesi için kullanılır.Kullanım biçimi:&değişken&i : i değişkenin adresini verir.int main(){int i;int *iptr;i = 5;iptr = &i;printf(“i değişkeninin adresi %p”, &i);printf(“iptr değişkeninin değeri %p”, iptr);return 0;} Çıktı:i değişkeninin adresi 0028FF18iptr değişkeninin değeri 0028FF18

  1. Veri bloğunu boş belleği kullanarak oluşturmak.

Bu yolla veriler için dinamik yer ayırılır. Bunun için malloc işlevikullanılır.(C++ new deyimini desteklemektedir.)void *malloc(n) : Boş bellekten n byte yer ayırıp başlangıç adresini döndürür.iptr = (*int) malloc(sizeof(int));ya daiptr = (*int) malloc(2);iprt = new int; //C++ da kullanımı bu şekildeyapılabilir.Veriye işaretçi değişken yoluyla erişimBir işaretçinin gösterdiği adresteki veriye erişmek için işaretçideğişkeninin önüne * karakteri eklenir.int main(){int i;int *iptr;iptr = &i;*iptr = 8;printf(ʺi değişkeninin değeri %dʺ, i);printf(ʺiptr adresinin içeriği %dʺ, *iptr);return 0;}Ekranda çıktı :i değişkeninin değeri 8iptr adresinin içeriği 8değişkeninin önüne * karakteri eklenir.int main(){int i;int *iptr;iptr = &i;*iptr = 8;printf(ʺi değişkeninin değeri %dʺ, i);printf(ʺiptr adresinin içeriği %dʺ, *iptr);return 0;}Ekranda çıktı :i değişkeninin değeri 8iptr adresinin içeriği 8!!! İşaretçi değişkenin gösterdiği adresin içeriği değişkenilişkilendirilmeden kullanılmamalıdır.1.2. İşaretçi Aritmetiğiİşaretçi değişkenler üzerinde toplama ve çıkartma işlemleri (++, ‐‐)geçerlidir. Ancak eklenecek değer tamsayı olmalıdır.İşaretçi değişkenin değeri 1 arttırıldığı zaman değişken bir sonrakiveri bloğunu işaret eder. Değişkenin alacağı yeni değer işaretçideğişkenin ne tip bir veri bloğunu işaret ettiğine bağlıdır.int *iptr, i;…iptr = &i; i değişkenin adresinin 1000 olduğunu varsayalım.iptr nin değeri 1000 dir.iptr++; iptr nin değeri 1002 olur. ( int değeri işaret ettiği için)aynı örneği double için yaparsakdouble *iptr, i;…iptr = &i; i değişkenin adresinin 1000 olduğunu varsayalım.iptr nin değeri 1000 dir.iptr++; iptr nin değeri 1008 olur. ( double değeri işaret ettiğiiçin)int *iptr, i, j;…iptr = &i; i değişkenin adresinin 1000 olduğunu varsayalım.iptr nin değeri 1000 dir.*(iptr+4)=2; 1008 adresinin içeriğini 2 yapar.!!! Arttırma işaret edilen veri bloğuna göre yapılır Yani bir sonraki veri bloğunun gösterilmesi sağlanır.iptr++ ; bir sonraki veri bloğunu göster(*iptr)++; iptr değişkeninin gösterdiği adresteki değeri 1 arttır. 

İçeriği Paylaş:
İlginizi Çekebilir
Yorum Yapılmamış

Henüz Hiç Yorum Yapılmadı..

Yorum Yaz

Pointer (gösterici, işaretçi)

Programlama 2

14/07/2016 | Yorum Yok | 28 | kucukakarsu