5.P. Problemler
1. İlklenmemiş
tipinden bir değişken
(a) eğer enum gunlerstatic veya dışsalsa ve (b)
eğer auto veya register
ise hangi değere sahip olacaktır?
2. Kısım 5.2’de sözü
edilen yapılarla ilgili sınırlamaları olan bir derleyiciniz olduğunu
varsayın. Argüman olarak aynı tipten iki yapının adreslerini alıp ikinci
yapıyı ilk yapıya aktaran yapi_ata adında bir fonksiyon
yazın.
3. Yeni yapı tipleri tanımlamanın iki yöntemi vardır:
yapı künyesi kullanarak ve typedef kullanarak.
Aşağıdakini typedef kullanan bir bildirime dönüştürün.
aylar değişkeni için yazılmış tanımı da uygun şekilde
değiştirin.
struct ay {
char *ayadi;
int ayuzunlugu;
};
/* … */
struct ay aylar[12];
4. Üç yerde (yani kalıplarda, bileşik değişmezlerde ve
sizeof’un işlenenleri olarak), bir veri tipi
verilmesi gerekir. Bu basit bir tip ismi olabileceği gibi daha karmaşık
bir ifade de olabilir. Böyle bir bağlamda aşağıdakilerin ne anlama
geldiğini bulmaya çalışın:
int * int *[3] int (*)[3] int *(float) int (*)(void)
5. Altkısım 5.8.1’in başında
tanımlanmış bulunan a dizisinin içindekileri görüntülemek için
aşağıdakini deneyin:
#include <stdio.h>
int main (void)
{
int i, j;
for (i=0; i<3; i++)
for (j=0; j<4; j++)
printf("%2d%c",a[i,j], j==3 ? '\n' : ' ');
return 0;
}
Neden doğru çıktıyı elde edemiyoruz? Görüntülenen sayılar nelerdir? Beklenen çıktıyı elde edecek şekilde programı değiştirin.
6. Altkısım 5.8.2’de
verilen örnekte neden sizeof(x) 420’dir
de sizeof(a) 8’dir?
7. Eğer Windows kullanıyorsanız,
help sort
komutunu kullanarak, eğer unix kullanıyorsanız
man sort
komutunu kullanarak, sort komutu için belirtilenleri okuyup,
bu bölümün sonunda verilen örnek programı, bunların bazılarını yapacak şekilde
geliştirin. Örneğin, büyük-küçük harf ayırımı yapmadan sıralama yapmayı veya
sıralama yaparken belirli bir kolondan itibaren dikkate almayı sağlayın.
8. Aşağıdaki örneklerde const
ve volatile anahtar sözcüklerinin ne işe yaradığını
anlamaya çalışın:
int const x = 11; int y = 22; int * const a = &y; int const volatile * const b = &x;
9. Aşağıdaki deyimlerden alınan çıktıları açıklamaya çalışın:
printf("%ld\n", sizeof "C iyidir!");
printf("%ld\n", sizeof ((char *)"C iyidir!"));