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