27
Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Programlama Dilleri 1

Ders 8: Gösterici Dizileri

Page 2: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Gösterici dizileri

Programlama Dilleri 1 2

Elemanları göstericilerden oluşan dizilere

“gösterici dizileri” (pointer arrays) denir.

<tipi> * dizi ismi [dizi_uzunluğu];

char *ad[10];

int *eleman[50];

float *fiyat[10];

Page 3: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 1 #include <stdio.h>

#include <conio.h>

#define boyut 3

void main(){

int dizi[] = {10, 100, 200}; //normal dizi

int *ptr[boyut], i; //gösterici dizisi

for (i=0; i<boyut; i++)

printf("dizi[%d]=%d\n",i,dizi[i]);

for (i=0; i<boyut; i++)

ptr[i] = &dizi[i]; //adres atama

for (i=0; i<boyut; i++)

printf("dizi[%d]=%d\n",i,*ptr[i]);

}

Programlama Dilleri 1 3

Page 4: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Programlama Dilleri 1 4

char isimler[5][20]={"veli", "ayşe", "ela", "murat", "selma"};

for (int i=0; i<5; i++)

printf("isimler[%d]=%s\n",i,isimler[i]);

Page 5: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Programlama Dilleri 1 5

char *isimler[] = {"veli", "ayşe", "ela", "murat", "selma"};

for (int i=0; i<5; i++)

printf("isimler[%d]=%s\n",i,isimler[i]);

Page 6: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Gösterici dizileri

Derleyici bir gösterici dizisi tanımlaması

ile karşılaşınca diğer dizilerde yaptığı

gibi, bellekte belirtilen sayıda göstericiyi

tutabilecek kadar ardışık yer tahsis eder.

char *s[5]; bildirimi ile derleyici, s

dizisinin 5 elemanlı ve her elemanın char

tipinde bir gösterici olduğunu anlar.

Programlama Dilleri 1 6

Page 7: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Gösterici dizileri

Dinamik olarak tahsis edilen alanlar,

gerektiği zaman yine bir döngü

yardımıyla serbest bırakılabilir:

...

for (k = 0; k < 10; ++k)

free(s[k]);

...

Programlama Dilleri 1 7

Page 8: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Gösterici dizileri

Bazı durumlarda, bir gösterici dizisinin son

elemanına özellikle NULL adresi atanır.

Böyle bir gösterici dizisi, boyutu

belirtilmeden işlenebilir.

Programlama Dilleri 1 8

Page 9: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 2

#include<stdio.h>

#include<conio.h>

void main()

{

char *isimler[] = {"ali","veli","gul","ayse","murat"};

int k;

for (k = 0; isimler[k]!=NULL; ++k){

puts(isimler[k]); }

getch();

}

Programlama Dilleri 1 9

Page 10: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Gösterici dizilerine ilk değer verilmesi

Normal dizilere ilk değer nasıl veriliyorsa

gösterici dizilerine de ilk değer aynı

biçimde verilir. Ancak dikkatli başlangıç

değeri vermek gerekir !!!

int *p[]={ (int*) 0x12FF50,

(int*) 0x12FF54,

(int*) 0x12FF58 };

Programlama Dilleri 1 10

Page 11: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 3 #include <stdio.h>

#include <conio.h>

#define boyut 3

main(){

int dizi1[ ] = {10, 100, 200};

int dizi2[ ] = {1, 5, 9};

int dizi3[ ] = {0, -42, 536};

int *ptr[boyut], i; //gösterici dizisi

ptr[0] = dizi1; //adres atama

ptr[1] = dizi2;

ptr[2] = dizi3;

for (i=0; i<boyut; i++)

printf("%d\n",*ptr[i]);

//ekrana ne basar ???

}

Programlama Dilleri 1 11

10 1 0

Page 12: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 4 #include <stdio.h>

#include <conio.h>

#define boyut 3

main(){

int dizi1[ ] = {10, 100, 200};

int dizi2[ ] = {1, 5, 9};

int dizi3[ ] = {0, -42, 536};

int *ptr[boyut], i; //gösterici dizisi

ptr[0] = dizi1; //adres atama

ptr[1] = dizi2;

ptr[2] = dizi3;

for (i=0; i<boyut; i++)

printf("%d\n",*ptr[i]+1);

//ekrana ne basar ???

}

Programlama Dilleri 1 12

11 2 1

Page 13: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 5 #include <stdio.h>

#include <conio.h>

#define boyut 3

main(){

int dizi1[ ] = {10, 100, 200};

int dizi2[ ] = {1, 5, 9};

int dizi3[ ] = {0, -42, 536};

int *ptr[boyut], i; //gösterici dizisi

ptr[0] = dizi1; //adres atama

ptr[1] = dizi2;

ptr[2] = dizi3;

for (i=0; i<boyut; i++)

printf("%d\n",*(ptr[i]+1));

//ekrana ne basar ???

}

Programlama Dilleri 1 13

100 5 -42

Page 14: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 6 #include <stdio.h>

#include <conio.h>

#define boyut 3

main(){

int dizi1[ ] = {10, 100, 200};

int dizi2[ ] = {1, 5, 9};

int dizi3[ ] = {0, -42, 536};

int *ptr[boyut], i; //gösterici dizisi

ptr[0] = dizi1; //adres atama

ptr[1] = dizi2;

ptr[2] = dizi3;

for (i=0; i<boyut; i++)

printf("%d\n",*(ptr[i]+1)+1);

//ekrana ne basar ???

}

Programlama Dilleri 1 14

101 6 -41

Page 15: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 7 #include <stdio.h>

#include <conio.h>

#define boyut 3

main(){

int dizi1[ ] = {10, 100, 200};

int dizi2[ ] = {1, 5, 9};

int dizi3[ ] = {0, -42, 536};

int *ptr[boyut], i; //gösterici dizisi

ptr[0] = dizi1; //adres atama

ptr[1] = dizi2;

ptr[2] = dizi3;

for (i=0; i<boyut; i++)

printf("%d\n",*(*(ptr+i)+2));

//ekrana ne basar ???

}

Programlama Dilleri 1 15

200 9 536

Page 16: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 8 #include <stdio.h>

#include <conio.h>

#define boyut 3

main(){

int dizi1[ ] = {10, 100, 200};

int dizi2[ ] = {1, 5, 9};

int dizi3[ ] = {0, -42, 536};

int *ptr[boyut], i; //gösterici dizisi

ptr[0] = dizi1; //adres atama

ptr[1] = dizi2;

ptr[2] = dizi3;

for (i=0; i<boyut; i++)

printf("%d\n",*(*(ptr+i)+2)-i);

//ekrana ne basar ???

}

Programlama Dilleri 1 16

200 8 534

Page 17: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

char tipinde gösterici dizileri

char türden bir gösterici dizisinin her bir

elemanı bir yazıyı göstermektedir.

char *yaz[]={"Haziran","Temmuz","Ağustos"};

Uygulamalarda en sık görülen gösterici

dizileri char türden olan gösterici dizilerdir.

Programlama Dilleri 1 17

Page 18: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

char *gunler[]={"Pazartesi","Salı", "Carşamba",

"Persembe","Cuma","Cumartesi","Pazar"};

Programlama Dilleri 1 18

Page 19: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

char tipinde gösterici dizileri

Bu tip dizilerin en çok kullanılma nedeni; program içinde sık kullanılacak yazıların her defasında yazılması yerine bir gösterici dizisinin elemanlarında saklamaktır.

char *hata[ ] =

{ "Bellek yetersiz",

"Hatalı şifre",

"Dosya bulunamadı",

"Sürücü hazır değil",

"Belirlenemeyen hata"};

Programlama Dilleri 1 19

Page 20: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Gösterici dizileri

Gösterici dizileri tıpkı diğer diziler gibi, yerel veya

global olabilir. Dizinin global olması durumunda,

dizi tanımlandığında dizi elemanlarının tümünde 0

değerleri bulunur.

Yerel bir gösterici dizisinin içinde ise çöp değerler

(rastgele adres değerleri) bulunur.

Programlama Dilleri 1 20

Page 21: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 9 char *pnames[] = {"Muhittin", "Mufit", "Serkan", "Kaan",

"Izzet", "Muzaffer", "Umit", "Sami", "Uygar", "Kayhan",

"Yakup", "Mert", "Cetin", "Ilknur", "Gokhan", "Salih",

"Irem", "Korhan", "Isin", "Berk", "Tacettin", "Duygu",

"Figen", "Funda", "Fuat", "Arda","Muhsin", "Guray",

"Necati", "Kadriye", "Gurbuz", "Hamide", "Volkan",

"Selami", "Esra", "Cumhur", "Can", "Aleyna", "Salih",

"Kamuran", "Ferhan", "Furuze", "Sukufe", "Sidre",

"Cahit", "Sercan", "Jale", "Bilge", "Tijen", "Tufan",

"Zeliha", "Cevdet", "Burak", "Ufuk", "Zarife",

"Bengisu", "Melda", "Zafer", "Yelda", "Didar", "Hande",

"Cumali", "Dilek", "Kemal", "Hasan", "Ismail", "Fatma",

"Burcu", "Siyami", "Busra", "Gizem", "Ramize", "Sezai",

"Polat", "Melike", "Umut", "Serencan", "Uzeyir",

"Kamile", "Deniz", "Veysel", "Emrehan", "Gulcan",

"Ender", "Furkan", "Veli", "Muhtesem", "Necmettin",

"Osman", "Perihan", "Didem", "Tunc", "Irmak","Petek",

"Sebahat", "Halime", "Mahir", "Leyla", "Eda", "Ali",

"Ibrahim", "Berivan"};

/*YUKARIDAKİ pnames isimli GÖSTERİCİ DİZİSİNİ KULLANARAK

SORULARI YANITLAYINIZ*/

Programlama Dilleri 1 21

Page 22: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 9a /*Dizinin elemanlarının göstermekte

olduğu isimleri ekrana yazdıran

kod...*/

int i;

for(i=0;pnames[i]!='\0';i++)

printf("%s\n",*(pnames+i));

Programlama Dilleri 1 22

Muhittin Mufit

Serkan

Page 23: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 9b /*2.Dizinin elemanlarının göstermekte

olduğu isimlerin ilk harfini ekrana

yazdıran kod...*/

int i;

for(i=0;pnames[i]!='\0';i++)

printf("%c\n",**(pnames+i));

//printf("%c ",*pnames[i]);

Programlama Dilleri 1 23

M M

S

Page 24: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 9c /*3.Dizinin elemanlarının göstermekte

olduğu isimlerin son harfini ekrana

yazdıran kod...*/

int i,j;

for(i=0;pnames[i]!='\0';i++){

for(j=0;*(pnames[i]+j)!='\0';j++);

printf("%c\n",*(pnames[i]+j-1));

}

Programlama Dilleri 1 24

n t

n

Page 25: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 9d /*4.Kullanıcının klavyeden girdiği bir harf

karakteri ile dizinin elemanlarının

göstermekte olduğu isimlerden, içinde bu harf

olanları ekrana yazdıran kod...(küçük/büyük

harf olabilir) */

int i,j;

char ch;

printf("\nbir harf giriniz: ");

scanf("%c",&ch);

for(i=0;pnames[i]!='\0';i++)

for(j=0;*(pnames[i]+j)!='\0';j++)

if(pnames[i][j] == ch || pnames[i][j] == ch-

'A'+'a' || pnames[i][j] == ch-'a'+'A‘) {

printf("%s,",pnames[i]);

break; }

Programlama Dilleri 1 25

Page 26: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 9e /*5.Kullanıcı klavyeden bir yazı

karakteri girsin. Dizinin

elemanlarının göstermekte olduğu

isimlerden, içinde bu yazı olanları

ekrana yazdıran kod...(küçük/büyük

harf olabilir)*/

int i,j,k;

char *cp;

printf("\nbir yazi giriniz: ");

scanf("%s",cp);

/***/

Programlama Dilleri 1 26

Page 27: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/03/der… · Programlama Dilleri 1 Ders 8: Gösterici Dizileri

Örnek 9f /*6.Dizinin gösterdiği yazıların

uzunluklarının aritmetik ortalamasını

ekrana yazdıran kod...*/

int toplam=0;

float ortalama;

/***/

ortalama=(float)toplam/i;

printf("\nortalama=%2.3f'dir.",ortalama);

Programlama Dilleri 1 27