Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü Dizi Kavramı ve Bildirimi Dizi Elemanlarına İlk Değer Verilmesi gets, puts fonksiyonları
Adres Kavramı Adres hem donamım hemde yazılıma ilişkin bir kavramdır. Donanımsal olarak bellekte yer gösteren bir sayıdan ibarettir. Mikroişlemci bellekteki bir bölgeye ancak o bölgenin adres bilgisiyle erişebilir.
Adres Kavramı Bellek bölgesindeki yerini göstermekle kalmaz, tür bilgisini de verir. Bellekteki her bir byte diğerinden farklı bir adresle temsil edilir.
Nesnelerin Adresleri Her nesne bellekte yer kaplar ve bir adrese sahiptir. Nesnelerin adresleri, derleyici ve işletim sistemi birlikte karar verir.
Nesnelerin Adresleri Nesnelerin adresleri ; program yüklenmeden önce kesin olarak bilinemez programcı tarafından da önceden tespit edilemez. Programcı, nesnelerin adreslerini ancak çalışma sırasında (run time) öğrenebilir.
sizeof Operatörü Bir nesnenin ya da veri türünün bellekte byte cinsinden kapladığı alanın belirlenmesini sağlayan operatördür. İki biçimde kullanılır sizeof(nesne ismi) sizeof(tür) Fonksiyonların geri dönüş değerleri, bellekte ne kadar byte yer kapladığını gösterir.
szfoper.c programı #include <stdio.h> int main() { char c; short s; int i; long l; float f; double d; long double ld; int array[ 20 ]; /* 20 tane int dizi elemanı yaratılıyor */ int *ptr = array; /* gösterici dizisi yaratılıyor */ printf( " sizeof c = %d\t sizeof(char) = %d" "\n sizeof s = %d\t sizeof(short) = %d" "\n sizeof i = %d\t sizeof(int) = %d" "\n sizeof l = %d\t sizeof(long) = %d" "\n sizeof f = %d\t sizeof(float) = %d" "\n sizeof d = %d\t sizeof(double) = %d" "\n sizeof ld = %d\t sizeof(long double) = %d" "\n sizeof array = %d" "\n sizeof ptr = %d\n", sizeof c, sizeof( char ), sizeof s, sizeof( short ), sizeof i, sizeof( int ), sizeof l, sizeof( long ), sizeof f, sizeof( float ), sizeof d, sizeof( double ), sizeof ld, sizeof( long double ), sizeof array, sizeof ptr ); return 0; } szfoper.c programı szfoper.c dosyasindan alabilirsiniz
“szfoper.c” programı ekran çıktısı
Dizi Kavramı ve Bildirimi Bellekte sürekli bir biçimde bulunan aynı türden nesnelerin oluşturduğu kümeye dizi diyoruz. İki temel özelliği var Elemanların bellekte sürekli bir biçimde bulunması Elemanların aynı türden nesneler olması
Dizi Kavramı ve Bildirimi Dizi bildirimi aşağıdaki gibi yapılır <Tür> <Dizi_ismi> <Eleman_sayısı> örnekler; char s[30]; /*s, 30 elemanlı, her elemanı karakter olan dizidir*/ int ogrenci_sayisi[50]; /*ogrenci_sayisi, 50 elemanlı, her elemanı int olan dizidir*/ double notlar[20]; /*notlar, 20 elemanlı, her elemanı double olan dizidir*/
Dizi Kavramı ve Bildirimi char s[13]; c b i l g s a y r \n int ogrenci_sayisi[13]; 20 3 27 33 67 22 50 32 44 90 88
Dizi Kavramı ve Bildirimi Bildirim sırasında dizilerin eleman sayısı tamsayı türünden bir sabit ifadesiyle belirtilmek zorundadır. int x[n]; YANLIŞ, dizi uzunluğu sabit ifade olmalıydı. int x[30]; DOĞRU
Dizi Kavramı ve Bildirimi Dizilerde diğer nesneler gibi yerel ve global faaliyet alanlarına sahip olabilirler. Diziler, fonksiyonlara parametre olarak geçirilebilirler.
Dizi Elemanlarına İlk Değer Verilmesi <Tür> <Dizi_ismi> <uzunluk>={s1,s2,…}; Örnekler; int a[10]={22, 23, 4, 9, 2, 2, 3, 4, 0, 10}; double kilo[3]={45.7, 69.3, 90.5}; char s[10]={‘c’, ‘ ’, ‘d’, ‘e’, ‘r’, ‘s’, ‘i’, ‘\0’}; Dikkat! Küme parantezi ; ile sonlandırılmıştır.
Dizi Elemanlarına İlk Değer Verilmesi Dizilerin tüm elemanlarına ilkdeğer verme zorunluluğu yoktur. int a[10]={22, 23, 4}; İlk üç elemana ilk değer verilmiştir. Bu değişken global bir değişkense 4-10. elemanlar 0 değeri ile doldurulur. Eğer yerel değişken ise 4-10. elemanlar hafızada bulunan rasgele sayılardır.
Dizi Elemanlarına İlk Değer Verilmesi Dizinin uzunluğundan fazla elemana ilk değer verilmesi HATADIR. int a[3]={22, 23, 4,5,6};/* HATA*/ Dizi elemanlarına ancak sabit ifadeler ile ilkdeğer verilebilir. int a[3]={x, y, 4};/* HATA*/ Dizilere ilk değer verilirken dizi uzunluğu hiç yazılmayabilir. int a[ ]={22, 23, 4,5,6};/* DOĞRU*/
gets, puts fonksiyonları gets fonkisyonu klavyeden girilen karakterleri diziye yerleştirdikten sonra dizinin sonuna ‘\0’ sonlandırıcı karakterini koyar. 10 elemanlı bir dizi açmışsanız, diziye en fazla 9 elemanı gets ile yerleştirebilirsiniz.
#include <stdio.h> int main(void) { char dosya_ismi[128]; printf("Dosya ismi gir: "); gets(dosya_ismi); printf("%s \n", dosya_ismi); %puts(dosya_ismi);/*bunu da deneyin ve printf ile karsilastirin*/ return 0; } ornekgets.c programı ornekgets.c programını yazarar deneyiniz. Puts ve printf ile arasındaki farkı bulunuz.
gets, puts fonksiyonları Puts bir karakter dizisinin içeriğini ekrana yazdırmak için kullanılır. Puts ve printf işlevsel olarak eşdeğerdir.
/*bir tamsayi dizisinde bulunan elemanlarin sayisal toplamini bulan programdir. */ #include<stdio.h> int main(void) { int dizi[10]={20,30,80,55,100,60,80,90,10,60}; int toplam, k; for(k=0, toplam=0;k<10; ++k) toplam += dizi[k]; printf("toplam = %d\n", toplam); return 0; } diziornek.c programı