C’de Diziler (Array)

C dilinde diziler çok kullanışlıdır. Diziler, aynı isim ve farklı indis numarası ile verileri tutabildiğimiz değişkenlerdir. Aynı tür verilerle çalışırken büyük kolaylık sağlar. Diziyi kaç elemanlı tanımlamışsak, o kadar değişken tanımlamışız gibi düşünülebilir.

Dizileri normal bir değişken gibi tanımlarız. Önce tipini, ardından ismini, son olarak da isminin yanına köşeli parantez içinde eleman sayısını yazarız. Örnek olarak:

int dizi[10]; //10 elemanlı dizi tanımladık.
int dizi[10] = {0}; //10 elemanlı dizi tanımlayıp, tüm elemanlarını "0"a eşitledik.
int dizi[] = {0, 1, 2, 3, 4}; //Dizi tanımlarken eleman sayısını belirtmedik, fakat diziye 5 adet değer atadığımız için dizi otomatik olarak beş elemanlı tanımlandı.

Dizileri tanımlarken tüm elemanlarını “0”a eşitlemek faydalı olabilir. Bunu yapmadığımız zaman RAM’de, dizinin tanımlandığı bölgede hangi bilgi varsa, ona göre işlem yapılır. Özellikle dizilerle aritmetik işlem yapıyorsak, bu durum istenmeyen sonuçlara yol açabilir. Örneğin 5 elemanlı bir dizi tanımladık ve elemanlarını sıfıra eşitlemedik. 3 elemana veri giriş yaptık, 2 elemana hiç dokunmadık. Elemanların tümünü bir for döngüsüyle topladık. Dokunmadığımız elemanlarda o an hangi değer varsa, o değerler de toplama dahil olacaktır.

Dizilerle çalışırken unutulmaması gereken; indislerin “0”dan başladığıdır. Örneğin yukarıda 10 elemanlı bir dizi tanımladık. Ancak bu dizinin sonuncu elemanının indir numarası “9”dur. Eğer “10” indis numaralı elemana erişmeye çalışırsak, RAM’de, tanımlamış olduğumuz diziden bir sonraki bölüme erişiriz ki bu da bize alakasız bir sonuç döndürecektir.
Dizileri değişkenlere benzetmiştik. Kullanırken de aynen değişkenler gibi kullanılır, yanına köşeli parantez içinde indis numarası yazılır.

int dizi[] = {1, 2, 3, 4, 5};

 printf("%d", dizi[3]);

Yukarıdaki şekilde bir kod yazdığımızda, bir dizi tanımlayıp içerisine 5 tane eleman aktardık. Dizi otomatik olarak 5 elemanlı tanımlanmış oldu. printf ile kullanımda ise normal bir değişken gibi kullandık. Dikkat edilecek husus, dizinin “3” indis numaralı elemanını çağırdık. 0 1 2 3; yani dizinin 4. elemanını çağırmış olduk. Yukarıdaki kodun ekran çıktısında, “4” yazacaktır.

Son olarak dizilerin kullanımıyla ilgili şöyle bir kod yazalım.

int dizi[] = {1, 2, 3, 4, 5};
 int i;

 for(i = 0 ; i < 5 ; i++)
 {
       dizi[i] = dizi[i] * dizi[i];
       printf("%d. elemanin karesi = %d\n", i, dizi[i]);
 }

Bu örnekte, i isminde bir değişken tanımladık. Bu değişken sayaç görevi görecek. Ayrıca elemanları 1, 2, 3, 4 ve 5 olan bir dizi tanımladık. Şimdi for döngüsüne geçecek olursak, i’yi 0’a eşitleyerek başladık. Bu durumda indis 0 oldu. Dizinin 0. elemanını, yine dizinin 0. elemanıyla çarptık ve dizinin 0. elemanına atadık. Yani dizinin 0. elemanının karesini alıp aynı elemana atamış olduk. Hemen altında da ekrana 0. elemanı bastırdık ki bu, tanımladığımız dizideki aynı elemanın karesi olacaktır.
Döngü; i, 5’ten küçük olduğu sürece dönecektir. Yani 0, 1, 2, 3 ve 4 numaralı indisleri çağıracaktır. Zaten dizide tanımlı 5. bir indis olmadığı için bizim istediğimiz de 4’e kadar dönmesidir.

Share
  1. benim bi sorum olucaktı ben array kullanarak programa bir numara yazdığımda o numaraya karşılık gelen isim ve soyismi getiren program yazmaya çalısıyorum yrdım cı olurmusun?

    • struct ile bir tip tanımlayıp, bu tipin içinde numarayı tutan bir integer, ad ve soyadı tutan da iki adet karakter dizisi tanımlanabilir. Daha sonra bu tanımlanan tip ile bir dizi oluşturulur. Daha sonra bu diziye gerekli bilgileri girersiniz. Numarası girilen kişiyi çıkarmak için de for içinde diziye ait numara değişkenini kontrol edersiniz, girdiğiniz numarayla aynıysa ekrana bilgileri bastırırsınız.

      struct kisi{
                 int numara;
                 char ad[20];
                 char soyad[20];
                 };
          
          typedef struct kisi kisi;
          
          kisi kisiler[20];
          
          kisiler[5].numara = 30;
          sprintf(kisiler[5].ad,"%s","berk");
          sprintf(kisiler[5].soyad,"%s","baykal");
          
          printf("%d : %s %s", kisiler[5].numara, kisiler[5].ad, kisiler[5].soyad);
      

      struct ile kisi diye bir değişken tipi tanımladım. İçinde bir integer, iki tane de char array var. Daha sonra kisi tipinde kisiler isminde bir array oluşturdum. Atama ve ekrana bastırma şekli de gözüküyor. Yalnız “5” yazdığım yerlere, bunu döngü ile yapıp i yazabilirsiniz. Döngü içinde de if(girilen_numara == kisiler[i].numara) diye bir kontrol yaparsınız. Koşul sağlanırsa bilgileri bastırırsınız.

  2. bunu struct kullanmadan sadece arrayla yazmak istiyorum yani ben arrayda 20 tane numara kayadedicem a[] (20887645,3457654,…..)gibi ondan sonra ad soyadları bunlara atıycam sonrada çıktıda benden no yu istiycek ve ben no yu girdiğmde ism soyismi versin

    • Bunu struct kullanmadan nasıl yazacağınız hakkında bir fikrim yok. Çünkü eklemek istediğiniz ad ve soyad birer string. Yani karakter dizisi. Bunları dizide saklamak için string tipinde bir dizi tanımlamanız gerekir ki bildiğim kadarıyla böyle bir veri tipi C dilinde tanımlanamıyor. Struct ile yaptığımız da aslında bu işlem. Nasıl integer tipi bir tamsayı, char tipi de bir karakter depolayabiliyorsa, biz de struct ile içinde bir tamsayı, iki de karakter dizisi depolayabilen yeni bir veri türü yaratmış oluyoruz. Veri tipleriyle ilgili olarak şu linkteki PDF’i okuyabilirsiniz. http://www.enderunix.org/docs/veri-turleri.pdf PDF’te sizin dediğinize benzer bir işlem struct kullanılarak yapılmış. Kolay gelsin…

  3. tamam çok saol verdiğin bilgiler için ben yazmayı basardım her değişken için array olusturdum yani bir array yerine 3 tane array kullandım

  4. Web siteniz çok yararlı ve güzel oluş elinize sağlık

Yorum Yap


Not - Bunları KullanabilirsinizHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>