ACIKLAMA
Bu projemizde pointerlerin ne olduğunu ve nasıl calıştığını anlatıp , c/c++ dillerinde pointerlerin nasıl kullanıldığı birkac ceşitli ornekle anlatılacaktır.
Kod:
int main(int argc, char* argv[])
Programımızda başlangıcta int tipinden bir adet a değişkeni , int tipinden bir adet aptr pointeri değişkeni ve yine int tipinden 10 elemanlı bir b dizisi tanımlanmıştır. Daha sonra a değişkenine 7 değeri atanmıştır.
Hemen bir uyarı gecersek bir pointer değişkeni * işareti ile kullanıldığında (*aptr olarak) barındırdığı adresin gosterdiği bellek hucresi icerisinde bulunan sayısal değeri ifade ederken, * olmadan kullanıldığında (aptr olarak) barındırdığı adresi ifade eder. 5.Satırda Goruleceği uzere aptr değişkenine a değişkenin adresi atanmıştır. Pointer değişkenini aptr olarak(yıldız olmadan) kullanmak icerisine adres konulabileceği anlamına gelir ve bizde a değişkeninin adresini atadığımızdan sorun yoktur. %p işareti adres tipinden verileri gostermek amacıyla kullanılır.
1. printf ifadesine bakarsak a'nın adresi icin %p ifadesi kullanılmış ve gosterilecek olan &a arguman olarak verilmiştir.
printf("a'nin adresi %p \n aptr degiskeninin degeri %p\n",&a,aptr);
Burada gelecek olan (bastırılacak veri) veriyi bilemeyiz; cunku o anda a değişkenine ayrılan bellek bolgesini derleyici işletim sistemi yardımıyla belirlediğinden bilgisayardan bilgisayara calışma zamanına kadar bir cok nedenden dolayı farklılık gosterir. Dolayısıyla bu adres bilgisi şudur demek yanlış olur ama printf ifadesinin adres bilgisi bastıracağı acıktır.
printf("a'nin adresi %p \n aptr degiskeninin degeri %p\n",&a,aptr);
Aynı satırdaki aptr pointer değişkenin ise ne gostereceği de bellidir cunku pointer değişkeninin * olmadan kullanımının adres bilgisi bastıracağını daha once belirtmiştik. Bu printf ifadesinin hemen uzerinde olan
aptr=&a;
ifadesine dikkat ettiğimizde aptr değişkenine a değişkenin adresinin atandığını daha once gorebiliriz. Peki ama ne gosterecektir? Cevap şudur ki; yine aynı sebeplerden tam olarak şudur diyemeyiz fakat a'nın adresi ne ise aynı değer tekrar bastırılacaktır. Yani a'nın adresi olan &a ile aptr ifadeleri aynı adres değerini gostereceklerdir.
2. printf ifadesine bakarsak;
printf("a'nin degeri %d\n *aptr'nin degeri %d\n",a,*aptr);
a ve *aptr değişkenleri bastırılmıştır. a bir duz değişken olduğundan acıktır ki 7 değeri bastırılacaktır. *aptr değişkeninin ise gercek veriye işaret ettiğini daha once belirtmiştik ve bu pointer değişkeninin icerisinde barındırdığı adresin a değişkeninin adresiyle aynı olduğunu (5.Satırda) belirttiğimizden dolayı *ptr ifadesi 7 değerini gosterecektir.
3. printf ifadesine bakarsak;
printf("b dizisinin adresi %p \n b'nin ilk elemanin adresi %p\n",b,&b[0]);
Bir dizinin isminin tek başına kullanıldığında (b) dizi başlangıc adresini ifade ettiğini aynı zamanda dizinin başlangıc adresinin de dizinin ilk elemanının adresi ( &b[0] ) olduğunu diziler konusundan biliyoruz. Bu durumda bu iki ifade de aynı sayısal adresi gosterecektir.
4. printf ifadesine bakarsak;
printf("b nin ikinci elemanin adresi %p\n",&b[2]);
Burada dizinin 2. elemanının adresi bastırılacaktır. Dizinin başlangıc adresinin değeri ne ise buradaki değerde onun 8 fazlası olacaktır. Neden 8 olduğunun yanıtını ise şu şekilde acıklayalım; int tipinde bir değişken 4 byte bellek bolgesi kapladığından 2. elemanın adresi dizinin başlangıc adresinden 8 byte ilerde olmalıdır. Burada dikkat edilmesi gereken husus bellek adresi hexadecimal tabanda olduğundan toplama işlemide hexadecimal olarak tabana uygun olarak hesaplanmalıdır.
5. printf ifadesine bakarsak;
printf("&*ptr= %p &a=%p \n *&ptr=%p ",&*aptr,&a,*&aptr);
İlk bastırılacak olan ifade pointer değişkenin gosterdiği gercek veririn (a’nın) adresidir. İkinci ifade a değişkenin adresini bastırır. Ucuncu ifade ise pointer değişkenin adresinin icinde bulunan veriyi ki oda a’nın adresi olmaktadır. Sonuc olarak bu uc ifade de a’nın adresini gosterecektir.
6. printf ifadesine bakarsak;
printf("&aptr degeri %p",&aptr);
Bu ifadesi ise pointer değişkenin adresini bastıracaktır.
__________________
Pointer Nedir Nasıl Calışır? Pointer Ornek Program Uzerinde Anlatım
Android & IOS Uygulama Geliştirme0 Mesaj
●44 Görüntüleme
- ReadBull.net
- Programlama ve Yazılım
- Android & IOS Uygulama Geliştirme
- Pointer Nedir Nasıl Calışır? Pointer Ornek Program Uzerinde Anlatım