16 Kasım 2016 Çarşamba

Her Yönüyle Pointerlar - 2

Dizilerde pointer kullanımı biraz farklıdır. Tanımlanmış bir dizi için atanan adreslerin hepsi atanan pointer ile tutulabilir.

int dizi[5]={1,2,3,4,5};
   
    int *p;
   
    p = dizi;

Dizinin tüm elemanlarını adresleri p pointerına aktarılmış olur. İndis değerlerine göre p, p+1, p+2 şeklinde tüm dizi elemanlarına ulaşılabilir.

Aşağıdaki örneğe bakalım;

 #include <iostream>  
 int main() {  
      int dizi[5]={1,2,3,4,5};  
      int *p;  
      p = dizi;  
      printf("%u \n",p);  
      printf("%u \n",p+1);  
      printf("%u \n",p+2);  
      printf("%u \n",p+3);  
      printf("%u \n",p+4);  
      //adresteki veri yazdırılmak istenirse  
      printf("\nDizinin 3. elemaninin adresindeki veri = %d \n",*p+2);  
      //pointerlara istenirse dizinin ilk ve ikinci elemanları da atanabilir  
      p = &dizi[0]; // burada sadece dizinin ilk elemanının adresi tutulur  
      printf("\n\n%u ",p);  
 }  

Alt satırda p =&dizi[0] diyerek istersek dizinin tek bir elemanını da pointera aktarabiliriz. Programın çıktısı aşağıdaki gibi olacaktır.


Pointer ile String Kullanımı

Pointer ile string kullanım mantığı normal diziler ile aynı şekildedir. Herhangi bir karakter dizisinin başlangıç adresi pointer değişkende saklanır, her karakter için pointer indeksi artırılabilir.

char yazi[]="karakter";
    char *p;
   
    p=yazi;

Aşağıdaki örneği inceleyelim;

 #include <iostream>  
 int main() {  
      char yazi[]="karakter";  
      char *p;  
      p=yazi;  
      printf("%u adresindeki karakter: %c\n",p,*p);  
      printf("%u adresindeki karakter: %c\n",p+1,*p+1);  
      printf("%u adresindeki karakter: %c\n",p+2,*p+2);  
 }  

Her bir karakter için bir byte alan tuttuğu için pointerların işaret ettiği adresler birer artacaktır. Programın çıktısı aşağıdaki gibi olacaktır.



Hiç yorum yok:

Yorum Gönderme