Standart C Programlama Dili


5.P. Problemler

1. İlklenmemiş “enum gunler” tipinden bir değişken (a) eğer 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. İki yerde (yani kalıplarda 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) 210’dur da sizeof(a) 2’dir?

7. Eğer MS-DOS kullanmakta iseniz, MS-DOS elkitabında SORT komutu için belirtilenleri okuyup, bu bölümün sonunda verilen örnek programı, bunları da 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;
const volatile * const   b = &x;