Bir değişken tanımladığınızda bilgisayarın RAM’ında değişken değerinin tutulması için bir alan ayrılır. Ayrılan her alanında bir referans değeri vardır. Değişken içerisindeki değere ihtiyaç duyulduğunda o referans numarasındaki data alınarak kullanılır. Bu durum sadece bir değişken için geçerlidir. Dizi değişkenlerin yapısı ise ilk değerin RAM’deki referans değeri belirlenir ve bir sonraki referans değerine ise dizi değişkeninin ikinci değeri tutulur. C’de dizi değişkenler aynı değer tipinde olmalıdır.
Dizi değişken tanımlanırken önce değişkenin tipi sonra değişken adı ve hem sonrasına ise [] parantezle kullanılır. Daha sonra atama operatörü eklenir= kümeparantezler {deger,deger,deger} ile değerler tanımlanır. Tanımlanan değerler bir birinden virgüller ayrılarak yazılır. Bir dizi değişken içinde her değere bir index numarası atanır. İndex numaraları ilk değer 0 ile başlamak üzere bir bir artarak yükselir. Aslında ilk değerin aldığı referans numarasından sonra kaç adım geriye gidileceği anlamınada gelir. Aşağıda örnek bir tanımla ve ekrana çıktı verme işlemi yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. int sayiDizi[]={571,1071,1453,1915}; // ilk dizimizi oluturalım printf("Peygamberimizin dogumu : %d\n",sayiDizi[0]); //İlk dizi değişkenimizi ekrana basıyoruz. printf("Malazgirt Savasi : %d\n",sayiDizi[1]); //ikinci dizi değişkenimizi ekrana basalım printf("Istanbulun Fethi : %d\n",sayiDizi[2]); //üçüncü dizi değişkenimizi ekrana basıyoruz printf("Canakkale Savasi : %d\n",sayiDizi[3]); //dördüncü ve son değişkenimizi ekrana basıyoruz. getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
Örne bir dizi daha oluşturalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. char charDizi[]={"Pazartesi"}; // ilk dizimizi oluturalım printf("%c\n",charDizi[0]); //ekrana basıyoruz. printf("%c\n",charDizi[1]); //ekrana basıyoruz. printf("%c\n",charDizi[2]); //ekrana basıyoruz. printf("%c\n",charDizi[3]); //ekrana basıyoruz. printf("%c\n",charDizi[4]); //ekrana basıyoruz. printf("%c\n",charDizi[5]); //ekrana basıyoruz. printf("%c\n",charDizi[6]); //ekrana basıyoruz. printf("%c\n",charDizi[7]); //ekrana basıyoruz. printf("%c\n",charDizi[8]); //ekrana basıyoruz. getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
Bir dizi değişken içerisinde kaçtan deger olduğunu bilemezyiz. Dizi değişken sayısını öğrenmek için sizeof(dizi)/sizeof(int) fonksiyonu kullanılır.
1 2 3 4 5 6 7 8 9 10 11 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. int dizi[]={571,1071,1453,1915}; // ilk dizimizi oluturalım printf("%d\n",sizeof(dizi)/sizeof(int)); //ekrana 4 basacaktır. Dizi içerisindeki değiken sayısı getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
Peki dizi içerisindeki değişken sayısını bilmek bize ne sağlayacak? Aslında herşeyi, örneğin dizi elemanlarını tek tek ekrana basmak yerine bir döngü ile basmamızı sağlayacak.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. int dizi[]={571,1071,1453,1915}; // ilk dizimizi oluturalım int diziSayi=sizeof(dizi)/sizeof(int); //dizi değiken saysını aldık int say; //döngü sayacı için int bir değişken tanımladık. for(say=0;say<diziSayi;say++){ //döngümüzü oluşturuyoruz. printf("%d \n",dizi[say]); // sırayla ekrana dizi değişken değerlerini basıyoruz. } //ekrana 4 basacaktır. Dizi içerisindeki değiken sayısı getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
C’de Karakter Dizileri
C dilinde karaterleri char değişken tipide tutmaktayız. Bir haraf için bir char değer oluşturulur. Bir sözcük içinse char dizisiz tutulur. char sozcuk[]={“Mehmet”}
Bu değişkenin yapısı :
sozcuk[0]=”m”
sozcuk[1]=”e”
sozcuk[2]=”h”
sozcuk[3]=”m”
sozcuk[4]=”e”
sozcuk[5]=”t”
sozcuk[0]=”\0″
Diyecek sinizki “\0” nerden çıktı. İlk dizi değişken RAM’da bir referans numarası aldıktan sonra sonraki referans için dizinin ikinci elemanına verilir. Dizinin nerede bittiğini anlamak içinse dizinin son elemanına “\0” yani Null sabiti eklenir. Bu sabit ile dizinin sona erdiğini anlamış oluruz. Aynız zamanda diziyi ekrana bastığınızda son bir boşluk oluştuğunu göreceksiniz. O boşluğu sonlandırıcı sabiti yapmaktadır. Biz yukarıdaki değişkenin değer saysını sizeof(sozcuk)sizeof(char) şeklinde aldığımızda bize 7 değerini verecektir. Normalde altı karater olduğu için altı değişken tanımlanır ve son olarak sonlandırıcı eklenir sonlandırıcı ile beraber dizi sayısı 7 olur. String veri türlerinde değişken sayılarını alırken sizeof(sozcuk)sizeof(char)-1 şeklinde kullanarak sonladırıcıyı çıkarırız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. char dizi[]={"Merhaba C"}; // ilk dizimizi oluturalım int diziSayi=sizeof(dizi)/sizeof(char)-1; //dizi değiken saysını aldık (7-1=6) int say; //döngü sayacı için int bir değişken tanımladık. for(say=0;say<diziSayi;say++){ //döngümüzü oluşturuyoruz. printf("%c",dizi[say]); // sırayla ekrana dizi değişken değerlerini basıyoruz. } //ekrana 4 basacaktır. Dizi içerisindeki değiken sayısı getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
Scanf ile consoldan kullanıcının adını ve soyadını girmesini isteyelim ve daha sonra ekrana basalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. char ad[50]; //Kullanıcının adını tutacağımız değişken. char soyad[50]; //Kullanıcının soy adını tutacağımız değişken. printf("Adınızı Giriniz : "); //Konsola Adınızı Giriniz : yazıyor. scanf("%s",ad); // Konsola girlen değer enter yapıldıktansonra scanf ile ad değişkenine alınıyor. printf("\nSoyadınız Giriniz : ");//Konsola Soyadınızı Girniz : yazıyor. scanf("%s",soyad); //Girilen soyadı soyad değişkenine alıyoruz. printf("%s %s",ad,soyad); // daha sonra girilen değerler ekrana basıyoruz. %s dizi char bir değer basacağımız anlamına geliyor. getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
C Matris Dizi Değişkenler
Matris dizi değişkenler dizi değişken değerleri içersinde de yine dizi değerler tutabileceğimiz anlamına geliyor. int sayi[] şeklinde tanımlamış oldumuz dizi değişken tek boyutludur. int sayi[][] şeklindeki tanımlama ise iki boyutlu bir dizi değişken tanımlamsı yaptığımız anlamına gelmektedir. int sayi[][][] = 3 boyutlu, int sayi[][][][] = 4 boyutlu matris değişen …… Matris değişkenlere bir örnek yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. int sayilar[3][3]={{100,101,102},{201,202,203},{1001,1002,1003}}; printf("sayiler[0][0] = %d, sayiler[0][1]=%d, sayiler[0][2]=%d\n",sayilar[0][0],sayilar[0][1],sayilar[0][2]); printf("sayiler[1][0] = %d, sayiler[1][1]=%d, sayiler[1][2]=%d\n",sayilar[1][0],sayilar[1][1],sayilar[1][2]); printf("sayiler[2][3] = %d, sayiler[2][1]=%d, sayiler[2][2]=%d\n",sayilar[0][0],sayilar[0][1],sayilar[0][2]); getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
Şimdi bu diziyi döngüyle yazdıralım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. int sayilar[3][3]={{100,101,102},{1001,1002,1003},{10001,10002,10003}}; int x,y;//Döngümüzü sayacak sayaç değişkelerimizi tanımlıyoru.z for(x=0;x<3;x++){ //1. boyuttaki döngüyü sağlayacak for for(y=0;y<3;y++){ //2. boyuttaki döngüyü sağlayacak for printf("sayilar[%d][%d]=%d\n",x,y,sayilar[x][y]); //Ekrana dizi değişkeni ve değerini yazdırıyoruz. } } getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
Daha da pekiştirelim 3 boyutlu bir dizi yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. int sayilar[3][3][3]={{{100,101,102},{1001,1002,1003},{1001,1002,1003}},{{200,201,202},{2001,2002,2003},{2001,2002,2003}},{{300,301,302},{3001,3002,3003},{3001,3002,3003}}}; int x,y,z;//Döngümüzü sayacak sayaç değişkelerimizi tanımlıyoru.z for(x=0;x<3;x++){ //1. boyuttaki döngüyü sağlayacak for for(y=0;y<3;y++){ //2. boyuttaki döngüyü sağlayacak for for(z=0;z<3;z++){ printf("sayilar[%d][%d][%d]=%d\n",x,y,z,sayilar[x][y][z]); //Ekrana dizi değişkeni ve değerini yazdırıyoruz. } } } getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
Sözcüklerle matris dizi değişkeni oluşturalım. Sözcükler C PERL PHP yapı aşağıdaki gibidir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. char sozcuk[3][5]={"C","PERL","PHP"}; int x;//Döngümüzü sayacak sayaç değişkelerimizi tanımlıyoru.z for(x=0;x<3;x++){ //1. boyuttaki döngüyü sağlayacak for printf("%s\n",sozcuk[x]); } getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
Aslında ikinci boyuttaki her sözcüğün uzunluğu 5 olarak varsayılmış.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. char sozcuk[3][5]={"C","PERL","PHP"}; int x,y;//Döngümüzü sayacak sayaç değişkelerimizi tanımlıyoru.z for(x=0;x<3;x++){ //1. boyuttaki döngüyü sağlayacak for for(y=0;y<5;y++){ printf("%c",sozcuk[x][y]); } printf("|\n"); } getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
Daha da pekiştirelim ve sözcükleri kullanıcının girmesini isteyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. int s,x,y; printf("Kac adet sozcuk gireceksiniz : "); // Oluşturulacak dizi boyutu değerini istiyoruz. scanf("%d",&s);//gelen değeri s değişkenine atıyoruz. char sozcuk[s][15]; //Girilecek sözcükler 15 karater ile sınırlandırıyoruz. for(x=0;x<s;x++){ //sözcükleri döngüyle bir bir alıp değişkenlere yerleştiriyoruz. printf("%d. sozcugu giriniz : ",x+1); //Sıradaki sözcüğü ekrana girmesini istiyoruz. scanf("%s",sozcuk[x]); //girilen sözcüğü değişkene alıyoruz. printf("\n"); //her sözcükte bir alt atıra ge } for(x=0;x<s;x++){ //ekrana yazdırmak için döngü yapıyoruz. 1. boyut for(y=0;y<15;y++){ //ekrana yazdırmak için 2. boyut döngüsünü yapıyoruz. if(sozcuk[x][y]==0) break; // char dizisi 15 adetten oluştuğu için sözcük bitiminde döngüden çıkıyoruz. printf("%c",sozcuk[x][y]); // harfleri tek tek yazdırıyoruz. } printf("|\n");// sonraki sözcük için alt satıra geçiyoruz. } getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |