PDA

Tam Sürümünü Görmek İçin : const


BetulSahin
05/02/2007, 19:20
const int *isaretci;
int *const isaretci;
Bu iki deyim arasındaki fark nedir ?


acehreli
05/02/2007, 19:48
1) const int * isaretci;

Birincisinde isaretcinin gosterdigi sayinin o isaretci yoluyla degistirilemeyecegi soylenmektedir. AsIl sayi sabit olabilir de olmayabilir de. Isaretci baska bir sabit sayiyi gosterebilir ama:

int main()
{
const int degismez_sayi = 142;
int sayi = 42;
const int * isaretci = 0;

isaretci = &degismez_sayi;
// *isaretci = 143; // HATA: isaretci yoluyla degisemez

isaretci = &sayi; // Evet, isarecti baska bir sayiyi gosterebiliyor
// *isaretci = 43; // HATA: isaretci yoluyla degisemez
}

Ara not: Yazim acisindan farkli da olsa, su da birincisiyle ayni anlama gelir:

int const *isaretci;

Cunku onemli olan, 'const'in yildizin ne tarafinda oldugudur.


2) int * const isaretci;

Ikincisinde ise sabit olan isaretcidir. Isaretci ancak ilk gosterdigi sayiyi gosterebilir; baska sayiyi gosteremez. Sayi degistirilebilir ama:

int main()
{
int sayi = 42;
int baska_sayi = 52;
int * const isaretci = &sayi;

*isaretci = 43; // gosterdigi degistirilebilir

// isaretci = &baska_sayi; // HATA: isaretci baska sayiyi gosteremez
}

Tamamlamis olmak icin bir de her ikisinin de const olduguna bakabiliriz:

3) const int * const isaretci;

Bu durumda da ne isaretci baska bir sayiyi gosterebilir, ne de gosterdigi degistirilebilir:

int main()
{
int sayi = 42;
int baska_sayi = 52;
const int * const isaretci = &sayi;

// *isaretci = 43; // HATA: gosterdigi degistirilemez

// isaretci = &baska_sayi; // HATA: baska sayiyi gosteremez
}

Ali