08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

#include <br />

int main()<br />

{<br />

double d = 1874567812.987;<br />

int *ptr;<br />

ptr = &d;<br />

*ptr = 0;<br />

printf("d = %lf\n", d);<br />

}<br />

return 0;<br />

Yukarıdaki kodda double türden d değişkeninin adresi int türden bir nesneyi gösterecek<br />

ptr değişkenine atanıyor. Böyle bir atamadan sonra ptr double türden d değişkenini değil,<br />

int türden bir nesneyi gösterir.<br />

*ptr = 0;<br />

atamasıyla d değişkeninin ilk 4 byte'ına tamsayı formatında 0 değeri atanmış olur. Böyle<br />

bir atamadan sonra d değişkeninin değeri istenilmeyen bir biçimde değiştirilmiş olur, değil<br />

mi?<br />

Eğer göstericiye farklı türden adres bilinçli bir biçimde atanıyorsa tür dönüştürme işleci<br />

kullanılmalıdır:<br />

#include <br />

int main()<br />

{<br />

double d;<br />

unsigned int k;<br />

unsigned char *ptr;<br />

printf("bir gercek sayi girin :");<br />

scanf("%lf", &d);<br />

ptr = (unsigned char *)&d;<br />

for (k = 0; k < sizeof(double); ++k)<br />

printf("%u\n", ptr[k]);<br />

}<br />

return 0;<br />

Yukarıdaki main işlevinde double türden d değişkeninin adresi unsigned char türünden bir<br />

göstericiye atanıyor. ptr gösterici değişkeni byte byte ilerletilerek d değişkeninin her bir<br />

byte'ının değeri tamsayı olarak yorumlanarak ekrana yazdırılıyor.<br />

ptr = (unsigned char *)&d;<br />

deyiminde atamanın bilinçli olarak yapıldığını göstermek için d değişkeninin adresi önce<br />

unsigned char türden bir adres bilgisine dönüştürülüyor, daha sonra atama yapılıyor.<br />

Bir Gösterici Değişkene Adres Olmayan Bir Değerin Atanması<br />

Bu da bilinçli olarak yapılma olasılığı çok az olan bir işlemdir. C derleyicileri şüpheli olan<br />

bu durumu mantıksal bir uyarı iletisi ile programcıya bildirirler. Örneğin bu uyarı iletisi<br />

Borland derleyicilerinde aşağıdaki gibidir:<br />

261

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!