C Programlama

Ek Bilgiler

C'de Veri Türü Tanımlama (Typedef)

typedef ifadesini kullanarak C dilindeki veri türlerini temsil eden kelimeleri (int, char, float, vs.) farklı şekilde tanımlayabilirsiniz. Bu şekilde mevcut bir veri türü için yeni bir isim veya yeni bir veri türü oluşturabilirsiniz. typedef ifadesinin genel yapısı aşağıdaki şekildedir:

typedef eski-isim yeni-isim;

Yukarıdaki işlem satırı ile oluşturulan yeni-isim ifadesini değişken bildiriminde kullanabilirsiniz.

Aşağıdaki işlem satırı size bir int değişken tanımlamanız için tms ifadesini kullanma olanağı sağlar:

typedef int tms;

Şimdi, bu özelliği bir örnek üzerinde incelemeye çalışalım:

#include <stdio.h>

typedef int tms;

void main (void)
{
  tms id1;

  id1 = 21;

  printf("%d", id1);
}

Yukarıdaki örnekte, program aşağıdaki satırı ekrana yazar:

21

Program typedef kullanarak int ifadesi ile aynı işlemi gerçekleştiren tms adlı bir başka bir ifade tanımlar. değişken bildiriminde tms ifadesini kullanır.

typedef ifadesini kullanarak bir veri türünü temsil eden ikinci bir ifade tanımlamanız ilk ifadeyi geçersiz hale getirmez. Ayrıca, bir veri türünü temsil eden ikiden fazla ifade tanımlayabilirsiniz. Bu özelliği de bir örnek üzerinde incelemeye çalışalım:

#include <stdio.h>

typedef int tms;
typedef tms tams;

void main (void)
{
  int id1;

  tms id2;
  tams id3;

  id2 = 4;
  id3 = 11;

  for (id1=0; id1<5; id1++, id2++, id3++) printf("%d ", id2+id3);
}

Yukarıdaki örnekte, program aşağıdaki satırı ekrana yazar:

15 17 19 21 23

Program, size bir int değişkeni tanımlamak için 3 farklı ifade kullanma olanağı sağlar. Sonuç olarak, id1, id2 ve id3 değişkenlerinin hepsi birer int değişkendir.

Ayrıca uzun ifadelerle bildirimleri yapılan veri türleri için typedef ifadesini kullanarak kısa kelimeler elde edebilirsiniz:

#include <stdio.h>

typedef unsigned short int usi;

void main (void)
{
  usi usid1;

  usid1 = 32453;
  printf("%u", usid1);
}

Yukarıdaki örnekte, program unsigned short int veri türündeki bir değişkeni usi gibi çok kısa bir ifade ile tanımlama olanağı sağlar.

Yapılarla birlikte typedef ifadesini kullanabilirsiniz:

typedef struct {
  char cdizi1[20];
  char cdizi2[20];
  int id1;
} yap1;

Yukarıdaki satırları kullandıktan sonra, yapı ile ilgili değişkenler tanımlayabilirsiniz. Aşağıdaki işlem satırı yukarıdaki yapı için 2 adet farklı değişken tanımlar:

yap1 y1, y2;

Şimdi, bu özelliği bir örnek üzerinde incelemeye çalışalım:

#include <stdio.h>
#include <string.h>

typedef struct {
  char cdizi1[20];
  char cdizi2[20];
  int id1;
} yap1;

void main (void)
{
  yap1 y1, y2;

  strcpy(y1.cdizi1, "Bilgisayar");
  strcpy(y1.cdizi2, "Programlama");
  strcpy(y2.cdizi1, "C");
  strcpy(y2.cdizi2, "Programlama");
  y1.id1 = 21;
  y2.id1 = 34;

  printf("%s %s\n%s %s\n", y1.cdizi1, y1.cdizi2, y2.cdizi1, y2.cdizi2);
  printf("%d %d", y1.id1, y2.id1);
}

Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:

Bilgisayar Programlama
C Programlama
21 34

Program, bir yapı ve bu yapı ile bağlantılı 2 adet değişken bildirimi yapar. Değişkenler yoluyla yapı elemanlarına atadığı değerleri ekrana yazar.

Yukarıda bahsettiğimiz yöntemi kullanarak, bir yapı için bir işaretçi bildirimi de yapabilirsiniz. Bu özelliği de bir örnek üzerinde incelemeye çalışalım:

#include <stdio.h>
#include <string.h>

typedef struct {
  char cdizi1[20];
  char cdizi2[20];
  int id1;
} yap1;

void main (void)
{
  yap1 *yp1;

  yp1 = (yap1*) malloc (sizeof(yap1)); /* 1 */

  strcpy(yp1 -> cdizi1, "Bilgisayar");
  strcpy(yp1 -> cdizi2, "Programlama");
  yp1 -> id1 = 21;  

  printf("%s %s %d", yp1 -> cdizi1, yp1 -> cdizi2, yp1 -> id1);
}

Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:

Bilgisayar Programlama 21

Program, bir yapı ve bu yapı ile bağlantılı bir adet işaretçi değişken bildirimi yapar. İşaretçi yoluyla yapı elemanlarına atadığı değerleri ekrana yazar. 1 sayısı ile gösterilen işlem satırında ise bir yapı boyutu için bellekte yer ayırır ve ayırdığı belleğin başlangıç adresini yp1 işaretçisine atar.