08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

Aşağıda tanımlanan get_month işlevi, kendisine başlangıç adresi gönderilen bir yazının,<br />

İngilizce ay isimlerinden biri olup olmadığını sınıyor. Sınadığı yazı geçerli bir ay ismi ise,<br />

işlev bu ayın kaçıncı ay olduğu bilgisiyle (1 - 12) geri dönüyor. İşlev, kendisine gönderilen<br />

yazı bir ay ismine karşılık gelmiyor ise 0 değeriyle geri dönüyor.<br />

#include <br />

#include <br />

#define SIZE 20<br />

int get_month(const char *str)<br />

{<br />

char *months[] = {"Ocak", "Subat", "Mart", "Nisan", "Mayis", "Haziran",<br />

"Temmuz", "Agustos", "Eylul", "Ekim", "Kasim", "Aralik"};<br />

int k;<br />

}<br />

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

if (!stricmp(months[k], str))<br />

return k + 1;<br />

return 0;<br />

int main()<br />

{<br />

char s[SIZE];<br />

int result;<br />

printf("bir ay ismi giriniz .");<br />

gets(s);<br />

result = get_month(s);<br />

if (result)<br />

printf("%s yilin %d. ayidir\n", s, result);<br />

else<br />

printf("%s gecerli bir ay ismi degildir\n", s);<br />

}<br />

return 0;<br />

Standart olmayan stricmp işlevinin, iki yazının karşılaştırmasını büyük harf küçük harf<br />

duyarlılığı olmadan yapması dışında, strcmp işlevinden başka bir farkı bulunmadığını<br />

anımsayın.<br />

Gösterici dizileri tıpkı diğer diziler gibi, yerel ya da global olabilir. Dizinin global olması<br />

durumunda, dizi hayata başladığında dizinin elemanlarının hepsinin içinde 0 değerleri<br />

bulunurken, yerel bir gösterici dizisinin içinde rastgele değerler olur. Dizinin her bir<br />

elemanı içinde bir adres bilgisi olduğuna göre, atama yapılmamış global gösterici<br />

dizilerinin her bir elemanı içinde 0 adresi (NULL adresi) bulunur. İlkdeğer verilmemiş<br />

yerel gösterici dizilerinin elemanları içinde ise rastgele adres değerleri bulunur.<br />

Bir gösterici hatasına neden olmamak için önce gösterici dizisi elemanlarına güvenli<br />

adresler yerleştirmek gerekir. Dizgeler statik ömürlü varlıklar oldukları için, bir gösterici<br />

dizisinin elemanlarına dizgelerle değer vermek bir gösterici hatasına neden olmaz. Zira<br />

dizgeler, daha önce de belirtildiği gibi, önce derleyici tarafından bellekte güvenli bir<br />

bölgeye yerleştirilir, daha sonra ise yerleştirildikleri bloğun başlangıç adresi olarak ele<br />

alınır.<br />

Bazı durumlarda, bir gösterici dizisinin son elemanına özellikle NULL adresi atanır. Böyle<br />

bir gösterici dizisi, dizi boyutu belirtilmeden işlenebilir. Aşağıdaki örneği inceleyin:<br />

303

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

Saved successfully!

Ooh no, something went wrong!