C – Pointer Ve Arrayler
Daha önceki yazılarımızda sayıların ve yahutta karakterlerin pointer olarak tanımlandığını gördük , peki arrayler (diziler) pointer olarak tanımlanabilir mi? Evet . Şimdi rastgele bir dizi tanımlasanız ve dizinin içine elemanlar yerleştirseniz bu dizinin elemanlarınız bilgisayarda yer tutması gerekiyor . Bu durumlarda arrayin içindeki elemanların yerlerini bulmak için yine pointerları kullanacağım.
İlk basit bir program yapacağım. Bir array tanımlayacağım ve sonrasında arrayin içine elemanlar yerleştireceğim daha sonra ise bu elemanların bilgisayarda tuttukları yerleri yani adreslerini ekrana bastıracağım. Kod Dizimi;
#include<stdio.h> int main(){ int sayiarrayi[]={1,45,56,192,23}; // burda herhangi bir yere bu arrayi atadım x ile int *x=sayiarrayi; /* burada pointerların yerlerini 3 farklı şekilde ekrana basabiliriz ben hepsini göstereceğim.*/ printf("%u\n",x); printf("%d\n",*x); printf("%d\n",x[0]); printf("\n"); printf("%u\n",x+1); printf("%d\n",*(x+1)); printf("%d\n",x[1]); printf("\n"); printf("%u\n",x+2); printf("%d\n",*(x+2)); printf("%d\n",x[2]); printf("\n"); printf("%u\n",x+3); printf("%d\n",*(x+3)); printf("%d\n",x[3]); printf("\n"); printf("%u\n",x+4); printf("%d\n",*(x+4)); printf("%d\n",x[4]); printf("\n"); return 0; }
Ekran Çıktısı;
6487600 1 1 6487604 45 45 6487608 56 56 6487612 192 192 6487616 23 23
Şimdi yapacağım programda bir array tanımlayıp arrayin boyutunu belirleyeceğim ve daha sonra kullanıcıdan sayılar alacağım. Bir fonksiyon oluşturup , Fonksiyon sayesinde arrayin en büyük değerini bulup ekrana en büyük değeri bastıracağım. Kod Dizimi;
#include<stdio.h> int maksimumdeger(int sayi[],int uzunluk){ /* Burada uzunluk tanımladım çünkü döngünün arrayle aynı uzunlukta olup en büyük sayıyı bulabilmesi için arrayin içine yazıdığım degeri uzunluk olarak yolladım*/ int max=sayi[0]; for(int x=1;x<uzunluk;x++){ if(sayi[x]>max){ max=sayi[x]; } } return max; } int main(){ int sayilar[5]; for(int i=0;i<5;i++){ scanf("%d",&sayilar[i]); } int maksimum=maksimumdeger(sayilar,5); // burada arrayi gönderirken uzunluguda gönderdim. printf("Sayilar dizisindeki En Buyuk Deger:\n"); printf("%d",maksimum); }
Ekran Çıktısı;
14 53 56 45 8 Sayilar dizisindeki En Buyuk Deger: 56
Son olarak da , Yaptığım programda ayları bir array olarak tanımlayıp kullanıcıdan hangi ayı görmesini istediğini soruyor ve daha sonra kullanıcının istediği ayı ekrana bastırıyoruz Kod Dizimi;
#include<stdio.h> char *aysecme(char *ay[],int uzunluk){ int aysec; printf("Yilin Kacinci Ayini Gormek Istiyorsunuz:"); scanf("%d",&aysec); if(aysec>=1 && aysec<=12){ return ay[aysec-1]; } else{ return NULL; } } int main(){ char aylar[]={"Ocak","Şubat","Mart","Nisan","Mayis","Haziran","Temmuz","Eylul","Ekim","Kasim","Aralik"}; char *x=aysecme(aylar, 12); if(x==NULL){ printf("Girdiginiz değer gecersiz"); } else{ printf("Sectiginiz ay:\n"); printf("%s",x); } return 0; }
Ekran Çıktısı;
Yilin Kacinci Ayini Gormek Istiyorsunuz:5 Mayis