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. Üç 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!"));