1 / 19

Pointer (İşaretçi) Yapısal Veri Tipleri (Struct)

Pointer (İşaretçi) Yapısal Veri Tipleri (Struct). Pointer (İşaretleyici). Pointerler C dilinin güçlü öğeleridir. Bir pointer ana bellekte bir adres belirtir. Bir pointer, başka bir değişkenin adresini gösteren bir değişkendir.

fia
Download Presentation

Pointer (İşaretçi) Yapısal Veri Tipleri (Struct)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Pointer (İşaretçi) Yapısal Veri Tipleri (Struct)

  2. Pointer (İşaretleyici) • Pointerler C dilinin güçlü öğeleridir. Bir pointer ana bellekte bir adres belirtir. • Bir pointer, başka bir değişkenin adresini gösteren bir değişkendir. • Bazı dillerde ancak assembler dili yardımıyla çözülebilecek pek çok sorun C dilinde pointerler ile kolayca çözülebilir. • Ayrıca adres kullanımı çok karmaşık veri yapılarının rahatlıkla kullanilmasını sağlar.

  3. Adres Kavramı • Adres, bir değişken için bellekte ayrılan yerdir. • Adres bilgileri hexadecimal sayı olarak gösterilir. • Adres operatörü &. int s; printf(“%x”,&s);

  4. Örnek • Girilen 3 değişkenin adreslerini ekrana yazdıran programı yazınız. #include <stdio.h> #include <conio.h> int a=5; double b=6.8; char c=‘K’; void main(){ printf(“a değişkeninin değeri = %d\n”,a); printf(“b değişkeninin değeri = %f\n”,b); printf(“c değişkeninin değeri = %c\n”,c);  printf(“a değişkeninin adresi = %x\n”,&a); printf(“b değişkeninin adresi = %x\n”,&b); printf(“c değişkeninin adresi = %x\n”,&c);  getch(); }

  5. Pointer Tanımlama • Pointer tipinde degiskenin tanimlanmasinda önce degiskenin ne tip bir degeri gösterdigini tanimlamak gerekir. • Pointer tipi degiskenler her zaman * isareti ile kullanilir: veritipi *d_adi; • Veritipi, d_adi adli pointer’in hafizada gösterdigi adreste ne tip bir degisken oldugunu belirtir. Teknik olarak herhangi bir pointer hafizada herhangi tipte bir degiskeni gösterebilir. Ama pointerlar ile yapilan islemlerde gösterdigi veritipi gözönüne alinarak hesap yapildigindan veritipi önem kazanir.

  6. Pointer Kullanımı • Pointer işlemlerinde 2 ayrı operatör kullanılır: İçerik (indirection) operatörü * ve adres operatörü &. • * : Degişkenin bir adres bilgisi tuttugunu gösterir ve o adresteki degeri verir. • &: Degiskenin hafizadaki adresini gösterir.

  7. Pointer Kullanımı char c=‘A’; char *p; p=&c; p c (15000)

  8. Pointer Kullanımı int x=10, y=20, z[3]; int *ptr; ptr=&x; y=*ptr; x=0; // *ptr=0; ptr=&z[0]; *ptr=541;

  9. Pointer Kullanımı int x=10, y=20, z[3]; int *ptr; ptr=&x; y=*ptr; x y z[0] z[1] z[2] ptr x y z[0] z[1] z[2] ptr x y z[0] z[1] z[2] ptr 1600 1602 1604 1606 1608 1600 1602 1604 1606 1608 1600 1602 1604 1606 1608

  10. Pointer Kullanımı *ptr=0; // x=0; ptr=&z[0]; *ptr=541; x y z[0] z[1] z[2] ptr x y z[0] z[1] z[2] ptr x y z[0] z[1] z[2] ptr 1600 1602 1604 1606 1608 1600 1602 1604 1606 1608 1600 1602 1604 1606 1608

  11. Pointer Kullanımı int x=100; int *ptr; ptr=&x; x = x +1; // *ptr = *ptr + 1; // *ptr += 1; ++ *ptr; *ptr++;

  12. Pointer Aritmetiği Bir pointer’a 1 eklemenin anlamı bir sonraki değer alanının (adresin) gösterilmesidir. Bu olaya “pointer aritmetiği” denir. int m[10]; ptr=&m[0]; ptr++ ; // ptr = &m[1]; &m[i] = (m + i)

  13. Pointer - Örnek #include<stdio.h> #include<conio.h> int a, *b; void main() { clrscr(); printf("Sayi gir: "); scanf("%d", &a); b=&a; printf("b= %d\n", b); printf("b adres - &b= %d\n", &b); printf("b içerik - *p = %d\n", *b); printf("a= %d\n", a); printf(“adres a - &a= %d\n", &a); getch(); }

  14. Pointer - Örnek #include<stdio.h> #include<conio.h> int i=1, k=2; int *p1 , *p2; main() { clrscr(); p1=&i; p2=&k; p1=p2; *p1=3; *p2=4; printf(“i= %d\n",i); printf(“p1= %d\n",*p1); getch(); }

  15. Struct • Birden fazla farklı veri tipini tek bir yapı içerisinde tutabiliriz. Örnek: int gun; int ay; int yil; struct Tarih{ int gun; int ay; int yil; }; struct Tarih bugun, dgunu; struct Tarih{ int gun; int ay; int yil; } bugun, dgunu;

  16. Struct struct kisiselBilgi{ int tel; char adres[50]; char sehir[15]; }; struct Musteri{ char adi[15]; char soyadi[15]; struct kisiselBilgi kBilgi; }; struct Tarih{ int gun; int ay; int yil; }; struct nufusBilgi{ char*ad, *soyad, *dog_yeri; struct Tarih dog_tarih; } eleman; eleman.ad = “Ozlem”; eleman.soyad = “Aktaş”; eleman.dog_tarih.gun=...; eleman.dog_tarih.ay=...; eleman.dog_tarih.yil=...;

  17. Örnekler 1- Kullanıcıdan bugünün tarihini gün, ay ve yıl olarak alan , kaydeden ve ekrana yazan program. 2- Kullanıcıdan 5 musteri bilgisini alarak kaydeden, bu bilgileri düzgün şekilde ekrana yazan programı yazınız. struct Musteri{ char adi[15]; char soyadi[15]; struct kisiselBilgi{ int tel; char adres[50]; char sehir[15]; }kBilgi; };

  18. Pointer ve Fonksiyon - Örnekler #include<stdio.h> #include<conio.h> void topla(int *a) { *a+=50; printf("%d", *a); } void main() { clrscr(); int z=300; printf("Sayı :%d\n",z); topla(&z); printf(“Yeni deger= %d",z); getch(); }

  19. Pointer ve Fonksiyon - Örnekler İki değişkenin değerlerinin yer değiştirmesi : swap işlemi void swap(int *a,int *b) { int t; t=*a; *a=*b; *b=t; } void main() { int x,y; x=100; y=25; printf("x=%d y=%d\n",x,y); swap(&x,&y); printf("x= %d y=%d\n",x,y); getch(); }

More Related