Göstericiler

Göstericiler

Gösterici (Pointer) Tanımı

    • Bir değişken kendi türünden bir değer tutar
    • Bir gösterici ise hafızadaki bir adresi tutar

      İçerisinde bellek adresi taşıyan değişkenlere gösterici denir.

Kullanımı:

VeriTipi *GöstergeAdı;
 
int* xptr;
 
float *a,*b,*c;

Göstergelerin tipleri gösterilen hücrelerde saklanan değerlerin veri tipleriyle uyumlu olmalıdır.

Hatırlatma 

  • Verilerin hafızada tutulduğu adresleri ifade eden sembolik isimlere değişken denir.
  • Bir değişkenin özellikleri;
  • ⇒adı
  • ⇒türü
  • ⇒değeri
  • ⇒tanım alanı
  • ⇒adresi

Göstericiler Hatırlatma

Gösterici Operatörleri

  • → Adres operatörü ⇒ &
  • → İçerik operatörü ⇒  *
int *p;int pointer p:p,bir tamsayı değişkenini gösterir.
 
*p → content of p:p’nin içeriği ( gösterdiği adresteki değer)
 
int i; → i,bir tamsayı değişken
 
&i → i değişkenin adresi
 
int i;
 
int *p;
 
p=&i;
 
i=5;*p=5; // aynı ifade
 
cout<<p;  //i adresini yazar
cout<<*p; // 5 değerini yazar
cout<<i;    //5 değerini yaza
cout<<&i; // i adresini yazar

int *g=0; // bellekte hiç bir yeri göstermez.

Bir göstericinin bellekte hiç bir yeri göstermediğini belirten ifade

Göstericilere İlk Değer Atama

  • Göstericilerin tutacağı hafıza adres değerini programcı atayamaz. Bu değeri işletim sistemi belirler.
  • Tanımlanmış bir değişkenin adresi göstericiye atanabilir.
int *p;
 
p=15F2;         // Yanlış atama ( adrese değer atanmaz)
 
int *p, i;     // p gösterici ( pointer ) tanımlandı
 
i=5;           // i’ ye 5 değeri atandı
 
p=&i;          // i’nin yani 5’in olduğu adres p ye atandı
 
int k=5;
 
int *p;
 
p=&k;        // &k k’nın adersi;
 
//  k’nın değeri 5//
 
// p’nin değeri 15F1//

Göstericiler İlk Değer Atama

Göstericilerin Boyutları
  • Tüm göstericilerin boyutları aynıdır. İşletim sisteminin kullandığı adresleme boyutu kadar. 32 bit,64 bit
  • Göstericilerin değişken türüne göre etki alanları değişir. 
int k;
 
int *p=&k;

Yukarıdaki göstericiler ile aşağıda tanımlanan göstericilerin veri tiplerinden dolayı boyutları farklıdır.

char c;
 
char *p=&c;
Gösterici Aritmetiği
int i, *p;
i=5;
p=&i; → p’ adresi 1F51 olsun 
 
p=p+1; → p= 1F51  + 1 =1F52 // DEĞİL
                   p= 1F51 + 4=1F55 // DOĞRU

!!!Tanımlanan gösterici int veri tipinde tanımlanmış adres te 4 bir yer alır +1 eklenmesi 4 bit daha eklenmesi demektir.

Dizi Gösterici İlişkisi

Dizi adları birer göstericidir. Dizinin adı ilk elemanı gösteren bir göstericidir.

int d[4]= {10,20,30,40};

dizisinin adres ve değerlerine erişmenin gösterge ile ifadesi aşağıda verilmiştir.

  1. #include <iostream>
  2. using namespace std;
  3. int main ()
  4. {
  5. int d[4]={10,20,30,40};
  6. int*dp;
  7. dp=&d[0];
  8.  
  9. cout<<“d[0]:<<d[0]<<endl;
  10. cout<<*dp:<<*dp<<endl;
  11. cout<<&d[0]:<<&d[0]<<endl;
  12. cout<<“dp:<<dp<<endl;
  13. cout<<*(dp+2):<<*(dp+2)<<endl;
  14. cout<<“d[2]:<<d[2]<<endl;
  15. cout<<“dp+2:<<dp+2<<endl;
  16. return 0;
  17. }
Beş elemanlı dizinin en küçük elemanı bulan bir program yazınız.
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. int kucuk (int *);
  5.  
  6. int main()
  7. {
  8. int dizi[5]={},*dp;
  9. for(int i=0;i<5;i++)
  10. {
  11. cout<<i+1<<“. elamn:;
  12. cin>>dizi[i];
  13. }
  14. dp=&dizi[0];
  15. cout<<endl<<“Dizinin ilk elemanin adresi=<<dp<<endl;
  16. cout<<endl<<“\t \tDizi”<<endl<<endl;
  17.  
  18. for(int i=0;i<5;i++)
  19. cout<<dizi[i]<<“\t”;
  20. cout<<endl<<endl<<“Dizinin en kucuk elemani:<<kucuk(dp);
  21. return 0;
  22. system(“pause”);
  23. }
  24.  
  25. int kucuk(int *dizi1 )
  26. {
  27. int k=*dizi1,*enkucuk;
  28. for(int i=0;i<5;i++)
  29. if(*(dizi1+i)<k)
  30. k=*(dizi1+i);
  31. enkucuk=&k;
  32. return *enkucuk;
  33. }

Kimler Neler Demiş?

  Abone ol  
Bildir