5.P. Problemler
1. İlklenmemiş
tipinden bir değişken
(a) eğer enum gunler
static
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!"));