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

sizeof(a) / sizeof(a[0])<br />

ifadesi dizi boyutunu verir. Örnek:<br />

for (i = 0; i < sizeof(a) / sizeof(a[0]); ++i)<br />

a[i] = 0;<br />

a bir dizi ismi olmak üzere, yukarıdaki döngü, a dizisinin eleman sayısı kadar döner.<br />

Yukarıdaki döngüde dizi boyutunun açık biçimde yazılması yerine<br />

sizeof(a) / sizeof(a[0]<br />

biçiminde yazılması size şaşırtıcı gelebilir. Böyle bir yazım biçiminin bir faydası olabilir mi?<br />

Dizi tanımlamalarında, ilkdeğer verilen dizilerin boyutlarının belirtilmesine gerek<br />

olmadığını, derleyicinin dizi boyutunu verilen ilkdeğerlerin sayısından çıkardığını<br />

biliyorsunuz. Aşağıdaki kodu inceleyin:<br />

#include <br />

int main()<br />

{<br />

int a[] = {2, 5, 7, 8, 9, 23, 67};<br />

int k;<br />

for (k = 0; k < sizeof(a) / sizeof(a[0]); ++k)<br />

printf("%d ", a[k]);<br />

printf("\n");<br />

}<br />

return 0;<br />

Yukarıdaki main işlevi içinde a isimli int türden bir dizi tanımlanıyor. Tanımlanan diziye<br />

ilkdeğer veriliyor. Derleyici verilen ilkdeğerlerin sayısını sayarak dizinin boyutunu 8 olarak<br />

saptar ve kodu buna göre üretir. main işlevi içinde yer alan for döngü deyimi, dizinin<br />

eleman sayısı kadar, yani 8 kez döner.<br />

Şimdi kaynak kodda değişiklik yapıldığını, a dizisine birkaç eleman daha eklendiğini<br />

düşünelim:<br />

int a[] = {2, 5, 7, 8, 9, 23, 67, 34, 58, 45, 92};<br />

Bu durumda for döngü deyiminde bir değişiklik yapılmasına gerek kalmaz. Çünkü<br />

derleyici bu kez dizinin boyutunu 11 olarak hesaplar. for döngü deyimi içinde kullanılan<br />

sizeof(a) / sizeof(a[0]<br />

ifadesi de bu kez 11 değerini üretir.<br />

sizeof İşlecinin Önceliği<br />

Tek terimli tüm işleçlerin, işleç öncelik tablosunun ikinci seviyesinde yer aldığını<br />

biliyorsunuz. sizeof da ikinci seviyede bulunan bir işleçtir.<br />

sizeof Bir İşlev Değildir<br />

sizeof işlecinin terimi çoğu kez bir ayraç içine yazıldığından, işlecin kullanımı bir işlev<br />

çağrısı görüntüsüne benzer:<br />

sizeof(y)<br />

Ancak sizeof bir işlev değil bir işleçtir. sizeof C dilinin 32 anahtar sözcüğünden biridir.<br />

227

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

Saved successfully!

Ooh no, something went wrong!