22
7. Hafta Pointer Dizileri Dr. Öğr. Üyesi Nesibe YALÇIN https://nesibeyalcin.wordpress.com/bsm104/ BARTIN ÜNİVERSİTESİ MÜHENDİSLİK, MİMARLIK VE TASARIM FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

7. Hafta – Pointer Dizileri

Dr. Öğr. Üyesi Nesibe YALÇIN

https://nesibeyalcin.wordpress.com/bsm104/

BARTIN ÜNİVERSİTESİ

MÜHENDİSLİK, MİMARLIK VE TASARIM FAKÜLTESİ

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Page 2: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

2

Pointer Dizileri

― Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir.

― Derleyici bir pointer dizisi tanımlaması ile karşılaşınca diğer dizilerde yaptığı gibi, bellekte belirtilen sayıda pointerı tutabilecek kadar ardışık yer tahsis eder.

― Değişken türü * Pointer dizisinin ismi [Eleman sayısı]; ― char *s[5];

char * il[81]; int * stok[25]; float *maas [40];

Page 3: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

3

Char Tipi Pointer Dizileri

― Uygulamalarda en sık görülen pointer dizileri, char türden olan pointer dizileridir.

― char türden bir pointer dizisinin her bir elemanı bir stringi (karakter dizisini) göstermektedir.

― char * isim[]={"ela","gökçe","burak","ömer"};

― char * kurslar[10] = {"Diksiyon","İngilizce", "Bilgisayar", "Bağlama","Gitar", "Tiyatro","Kişisel Gelişim","Fitness (bayanlar)", "Fitness (baylar)“, "Halk Oyunları",};

Page 4: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

4

Char Tipi Pointer Dizileri

― Char tipi pointer dizilerin en çok kullanılma nedeni; program içinde sık kullanılacak yazıları her defasında yazmak yerine bir pointerdizisi içerisinde saklayarak gerektiğinde ulaşmaktır.

char *hata[] = { "Bellek yetersiz", "Hatalı şifre", "Dosya bulunamadı", "Sürücü hazır değil", "Belirlenemeyen hata"};

Page 5: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

5

Char Tipi Dizi ve Pointerlar

#include <stdio.h>

#include <conio.h>

#include <string.h>

int main(){

char donem[]="Guz/Bahar Donemi";

printf("%s -> adresi %p\n\n",donem,donem);

char *ptr;

ptr=donem;

// char *ptr="Guz/Bahar Donemi";

for(int i=0;i<strlen(donem);i++)

printf("%c – adresi %p\n",*(ptr+i), (ptr+i));

// printf("%c – adresi %p\n",ptr[i],&ptr[i]);

printf("\n%s -> adresi %p\n\n",ptr,ptr);

getch (); }

Page 6: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

6

Char Tipi Diziler

― char dersler[6][20] = {"Programlama","Veritabani", "Elektronik","Matematik","Fizik","Veri Yapilari"};

Page 7: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

7

Char Tipi Diziler

― char dersler[6][20] = {"Programlama","Veritabani", "Elektronik","Matematik","Fizik","Veri Yapilari"};

int main(){

char dersler[6][20] = {"Programlama","Veritabani",

"Elektronik","Matematik",

"Fizik","Veri Yapilari"};

for(int i=0;i<6;i++){

for(int j=0;dersler[i][j]!='\0';j++)

printf("%c",dersler[i][j]);

printf("\n"); }

}

Page 8: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

8

Char Tipi Diziler

― char dersler[6][20] = {"Programlama","Veritabani", "Elektronik","Matematik","Fizik","Veri Yapilari"};

int main(){

char dersler[6][20] = {"Programlama","Veritabani",

"Elektronik","Matematik",

"Fizik","Veri Yapilari"};

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

printf("%s\n",dersler[i]);

}

Page 9: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

9

Char Tipi Pointer Dizileri

― char *dersler [20] = {"Programlama","Veritabani", "Elektronik","Matematik","Fizik","Veri Yapilari"};

Page 10: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

10

Char Tipi Pointer Dizileri

#include <stdio.h>

int main(){

char *donem="Guz/Bahar Donemi";

//char donem[]

puts(donem);

//char dersler[][20]

char *dersler[20] = {"Programlama","Veritabani",

"Elektronik","Matematik",

"Fizik","Veri Yapilari"};

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

printf("%d- %s\n",i+1,dersler[i]); // dersler[i]=*(dersler+i)

}

Page 11: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

11

Pointer Dizileri

#include<stdio.h>

#include<conio.h>

int main()

{

const int boyut=7;

int notlar[boyut]={25,40,5,95,50,65,45};

int toplam=0;

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

toplam += notlar[i];

float ort=(float)toplam/boyut;

printf("Toplam=%d, Ortalama=%.2f",toplam,ort);

getch();

}

adresi Dizi elemanı

değeri

0x04 notlar[0] 25

0x08 notlar[1] 40

0x0C notlar[2] 5

0x10 notlar[3] 95

0x14 notlar[4] 50

0x18 notlar[5] 65

0x1C notlar[6] 45

Page 12: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

12

Pointer Dizileri

#include<stdio.h>

#include<conio.h>

int main(){

const int boyut=7;

int notlar[boyut]={25,40,5,95,50,65,45};

int *ptr[boyut];

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

ptr[i]=&notlar[i];

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

}

}

ptr[0]

ptr[1]

ptr[2]

ptr[3]

ptr[4]

ptr[5]

ptr[6]

adresi Dizi elemanı

değeri

0x04 notlar[0] 25

0x08 notlar[1] 40

0x0C notlar[2] 5

0x10 notlar[3] 95

0x14 notlar[4] 50

0x18 notlar[5] 65

0x1C notlar[6] 45

Page 13: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

13

Pointer Dizileri

ptr[0]

ptr[1]

ptr[2]

ptr[3]

ptr[4]

ptr[5]

ptr[6]

adresi Dizi elemanı

değeri

0x04 notlar[0] 25

0x08 notlar[1] 40

0x0C notlar[2] 5

0x10 notlar[3] 95

0x14 notlar[4] 50

0x18 notlar[5] 65

0x1C notlar[6] 45

#include<stdio.h>

#include<conio.h>

float ortalama(int *dizi[],int eleman_sayi)

{

int toplam=0;

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

toplam+=*dizi[i];

float ort=(float)toplam/eleman_sayi;

return ort;

}

int main()

{

const int boyut=7;

int notlar[boyut]={25,40,5,95,50,65,45};

int *ptr[boyut];

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

ptr[i]=&notlar[i];

printf("Ortalama=%.2f",ortalama(ptr,boyut));

getch();

}

Page 14: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

14

Pointer Dizileri #include <stdio.h>

int main(){

int dizi[] = {66, 6, 42, 11, 54}; //normal dizi

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

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

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

printf("\n");

for (i=0; i<5; i++){//gösterici dizisine adres atama

ptr[i] = &dizi[i];

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

}

}

Page 15: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

15

Pointer Gösteren Pointerlar

― Bir pointer, başka bir pointerın adresini gösterebilir:

int x; int *p1; int **p2; x = 5; p1 = &x; p2 = &p1;

NOT: int ** türünden olan bir pointer değişkene, int * türünden bir pointerın adresi atanır.

Page 16: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

16

Pointer Gösteren Pointerlar #include<stdio.h>

int main(){

int x;

int *p1;

int **p2;

x = 5;

p1 = &x;

p2 = &p1;

printf("x degiskeni:%d, adresi:%p\n",x,&x); //&x-->p1

printf("p1 gostericisi:%p, adresi:%p\n",p1,&p1); //&p1-->p2

printf("p2 gostericisi:%p, adresi:%p\n",p2,&p2);

}

Page 17: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

17

Pointer Gösteren Pointerlar

*p1=24; **p2=10; *(*p2)=10;

Page 18: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

18

Pointer Gösteren Pointerlar #include<stdio.h>

#include<conio.h>

int main(){

double x=-2.1;

double y=0.34;

double *p=NULL;

double **p2=NULL;

printf("x:%.2f, y:%.2f\n",x,y);

p=&x;

*p=2.8;

printf("x:%.2f, y:%.2f\n",x,y);

p2=&p;

printf("x:%.2f, y:%.2f\n",x,y);

*p2=&y;

*p=20;

printf("x:%.2f, y:%.2f\n",x,y);

**p2=6.8;

printf("x:%.2f, y:%.2f\n",x,y);

getch(); }

Ekran çıktısı ????

Page 19: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

19

Pointer Gösteren Pointerlar

#include<stdio.h>

#include<conio.h>

#include<string.h>

#define N 6

int main()

{

char *meyveler[N]={"muz","elma","cilek","karpuz","armut","uzum"};

for(int i=0;i<N;i++) //meyve isimleri

printf("%d. %s\n",i+1,*(meyveler+i));

for(int i=0;i<N;i++) //meyve isimlerinin bas harfleri

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

for(int i=0;i<N;i++) { //meyve isimleri

for(int j=0;j<strlen(*(meyveler+i));j++)

printf("%c",*(*(meyveler+i)+j));

printf("\n");

}

getch();

}

Page 20: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

20

Tanımlar Pointer Gösterimi Dizi Gösterimi Açıklama

**ptr *dizi[] Bir pointer dizisi

*ptr dizi[0] Dizideki ilk eleman, dizideki ilk pointerın adresi ya da bir string dizisi için ilk string

*(ptr+0) dizi[0]

*(ptr+i) dizi[i] Dizideki (i+1). eleman, dizideki ikinci pointerın adresi ya da bir string dizisi için ikinci string

**ptr dizi[0][0] Dizideki ilk eleman, dizideki ilk pointerın ilk elemanı ya da dizideki ilk stringin ilk karakteri

**(ptr+i) dizi[i][0] Dizinin i.satırdaki ilk elemanı, dizideki i. pointerın ilk elemanı ya da i. stringin ilk karakteri

*(*(ptr+i)) dizi[i][0]

*(*(ptr+a)+b) dizi[a][b] Dizideki a pointerının b e lemanı; dizinin a satırı b sütunundaki eleman

**(ptr+a)+b dizi[a][0]+b İstediğimiz kullanımlardan biri değil !!

Page 21: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

21

Dipnot

― Dizinin ilk elemanının adresi ya da dizinin ismi dizinin başlangıç adresini verir.

dizi ↔ &dizi[0];

― Bir değişkenin adresi, değişkenin adının önüne & operatörü getirilerek öğrenilir ve bir pointerı yardımıyla tutulabilir.

― Bir pointerın gösterdiği adresteki değer, pointer adının önüne * operatörü getirilerek öğrenilebilir.

Page 22: 7. Hafta Pointer Dizileri - WordPress.com · 2 Pointer Dizileri ―Elemanları pointerlardan oluşan dizilere “pointer (gösterici) dizileri” (array of pointers) denir. ―Derleyici

22

Dipnot

― Fonksiyonun ismi fonksiyonun adresini verir. Fonksiyonun adresini tutacak pointer, fonksiyon ile aynı dönüş tipine ve parametre tanımlamalarına sahip olmalıdır.

dönüş_tipi (* pointer_adı)(parametreler) pointer_adı = fonksiyon_adı;

― int sayi; int *ptr1=&sayi; int * ptr2=&ptr1;

― **ptr2 = *ptr1 = sayi *ptr2 = ptr = &sayi ptr2 = &ptr1