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 />

char *aylar[] = {"Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran",<br />

"Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"};<br />

aylar dizisinin her bir elemanı char türden bir göstericidir. Bu gösterici dizisine, dizgeler<br />

ile ilkdeğer veriliyor. Başka bir deyişle, char türden bir gösterici dizisi olan aylar dizisinin<br />

her bir elemanı, yılın aylarının ismi olan yazıları gösteriyor.<br />

char Türden Gösterici Dizilerinin Kullanılma Temaları<br />

char türden gösterici dizileri yazılarla ilgili işlemler yapan programlarda sıkça kullanılır.<br />

Program içinde sık kullanılacak yazıların, kaynak kod içinde her defasında bir dizge olarak<br />

yazılması yerine, bir gösterici dizisinin elemanlarında saklanması çok rastlanan bir<br />

temadır. Aşağıdaki örnekte error_messages dizisinin her bir elemanında, hata iletilerine<br />

ilişkin yazılar saklanıyor.<br />

char *error_messages[] = {"Bellek Yetersiz!", "Hatalı şifre", "Dosya<br />

bulunamadı", "Belirtilen dosya zaten var", "sürücü hazır değil", "Okunacak<br />

dosya açılamıyor", "yazılacak dosya açılamıyor!..", "Belirlenemeyen<br />

hata!"};<br />

Artık programın herhangi bir yerinde yazılardan biri yazdırılmak istendiğinde, gösterici<br />

dizisinin herhangi bir elemanına erişilerek ilgili yazının başlangıç adresi elde edilir.<br />

/*...*/<br />

if (fp == NULL) {<br />

printf("%s\n", err[5]);<br />

return 5;<br />

}<br />

Şimdi de aşağıdaki programı inceleyin:<br />

#include <br />

int day_of_week(int day, int month, int year);<br />

char *months[] = {"January", "February", "March", "April", "May", "June",<br />

"July", "August", "September", "October", "November", "December"};<br />

char *days[] = {"Sunday",<br />

"Friday", "Saturday" };<br />

"Monday", "Tuesday", "Wednesday", "Thursday",<br />

void display_date(int day, int mon, int year)<br />

{<br />

printf("%02d ", day);<br />

puts(aylar[mon - 1]);<br />

printf(" %d ", year);<br />

printf("%s", days[day_of_week]);<br />

}<br />

Yukarıdaki programda ismi months ve days olan char türden gösterici dizileri<br />

tanımlanıyor. months dizisinin her bir elemanı, bir ay ismini içeren yazının başlangıç<br />

adresini, days dizisinin her bir elemanı ise bir gün ismini içeren yazının başlangıç adresini<br />

tutuyor. Gösterici dizisinin elemanlarına dizgelerle ilkdeğer veriliyor. display_date isimli<br />

işlevin, bir tarihe ilişkin gün, ay ve yıl değerlerini aldığını, ilgili tarihi ekrana yazdırırken,<br />

gösterici dizilerinden faydalandığını görüyorsunuz.<br />

Belirli sayıda bir yazı grubu içinde, bir yazının var olup olmadığının sınanması amacıyla da<br />

char türden gösterici dizileri sıklıkla kullanılır.<br />

Bir yazının belirli bir yazıyla aynı olup olmadığı standart strcmp işleviyle sınanabilir. Peki,<br />

bir yazının, bir grup yazı içinde var olup olmadığı nasıl saptanabilir?<br />

302

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

Saved successfully!

Ooh no, something went wrong!