BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

Benzer belgeler
Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

Yrd. Doç. Dr. Caner ÖZCAN

Pointer Kavramı. Veri Yapıları

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-2 Değişken Kavramı ve Temel Operatörler

Pointers (İşaretçiler)

8. İŞARETCİLER (POINTERS)

Yrd. Doç. Dr. Caner ÖZCAN

ALGORİTMA VE PROGRAMLAMA II

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-11 Karakter Diziler. Yrd. Doç. Dr. Ümit ATİLA

Göstericiler (Pointers)

Yrd. Doç. Dr. Caner ÖZCAN

BLM111 Programlama Dilleri I. Hafta 10 Diziler. Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

Hafta 13 Fonksiyonlar

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-10 Diziler. Yrd. Doç. Dr. Ümit ATİLA

Genel Programlama II

Hafta 11 Çok Boyutlu Diziler

Hafta 12 Karakter Tutan Diziler

ALGORİTMA VE PROGRAMLAMA II

Yrd. Doç. Dr. Caner ÖZCAN

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

Hafta 7 C Programlama Diline Giriş ve C Derleyicisi

BÖLÜM 9: POINTERLER (İŞARETÇİLER)

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-1 Kapsama Kuralları & Rasgele Sayı Üretimi & Rekürsif (Özyinelemeli) Fonksiyonlar

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER

Hafta 4 Döngü Yapıları

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-7 Sıralama Algoritmaları

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers)

BLM 112- Programlama Dilleri II. Hafta 1 Giriş, Kapsama Kuralları ve Rasgele Sayı Üretimi

ALGORİTMA VE PROGRAMLAMA II

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

BLM 111 ALGORİTMA VE PROGRAMLAMA I

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-4 Döngü Yapıları. Yrd. Doç. Dr. Ümit ATİLA

YZM 2116 Veri Yapıları

C PROGRAMLAMA D İ L İ

Diziler (Arrays) Çok Boyutlu Diziler

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

Hafta 8 C Dilinde Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

ALGORİTMA VE PROGRAMLAMA I

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

ALGORİTMA VE PROGRAMLAMA II

Hafta 5 Algoritma Örnekleri ve Analizi

C++ Dersi: Nesne Tabanlı Programlama

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

Struct VE GÖSTERİCİLER FONKSİYONLARDA STRUCT KULLANIMI Programlama dilleri hafta -

Birlik (Union) 1 Birlik (Union), enum, typedef

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

HSancak Nesne Tabanlı Programlama I Ders Notları

Programlama Dilleri 1. Ders 5: Göstericiler

ALGORİTMA VE PROGRAMLAMA I

BÖLÜM 11: YAPISAL VERİ TİPLERİ

Özyineleme (Recursion)

Nesne Tabanlı Programlama

YZM 2116 Veri Yapıları

Sunum İçeriği. Programlamaya Giriş

Bölüm 6. Veri Türleri ISBN

Hafta 9 C Dilinde Kontrol ve Döngü Yapıları

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

Dr. Fatih AY Tel: fatihay@fatihay.net

Örnek1: #include <iostream> #include <string> using namespace std;

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

JAVADA DİZİ İŞLEMLERİ

T.C. MALTEPE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ YAZILIM MÜHENDİSLİĞİ LİSANS PROGRAMI Bahar Yarıyılı

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

C#(Sharp) Programlama Dili

YAPILAR (STRUCTURES)

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

BLM 111 ALGORİTMA VE PROGRAMLAMA I

BLM 111 Algoritma ve Programlama I Güz 2018

Bilgisayar Programcılığı. Ögr. Gör. Cansu AYVAZ GÜVEN

Nesneye Yönelik Programlama (OOP) 7.Hafta

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

Diziler İndisli Değişkenler

Bölüm 8, Yrd. Doç. Dr. A. Kadir YALDIR PAÜ Bilgisayar Mühendisliği Bölümü BÖLÜM 8: DİZİLER

Bir dizinin boyutları sabittir ve kullanılmadan önce belirlenmelidir. Dizi boyutunu belirlemek için başka bir değişkende kullanabilirsiniz.

3.1 Pointer in Yararları

C++ Dersi: Nesne Tabanlı Programlama 2. Baskı

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

DİZİLER 5/4/2010. ENF-102 Jeoloji Giriş. Tek Boyutlu Diziler. Tek Boyutlu Diziler. Örnek. Örnek

Dizgiler. C dilinde karakter m şeklinde tek tırnak içerisinde yazılan ifadelerdir. Bu karakterlerin her biri aslında bir tamsayı ile ifade edilir.

YZM 2105 Nesneye Yönelik Programlama

Giriş. ENF102 Jeoloji

Transkript:

1 BLM 112- Programlama Dilleri II Hafta 4 İşaretçiler (Pointers) Dr. Öğr. Üyesi Caner Özcan İyilik insanları birbirine bağlayan altın zincirdir. ~Goethe

Hafıza Yapısı 2 Bir değişken tanımlandığında arka planda bilgisayarın hafızasında bir konuma yerleştirilir. Hafıza küçük hücrelerden oluşmuş bir blok olarak düşünülebilir. Bir değişken tanımlandığında bellek bloğundan gerekli miktarda hücre ilgili değişkene aktarılır. Hafızada değişken için ne kadar hücre ayrılacağı değişkenin tipine göre değişir. 2

Hafıza Yapısı 3 3

Hafıza Yapısı 4 Hücrelerden oluşan bellek yapısını verilen kod parçası için uygularsak. int veri tipi 2 bayt, float tipinin 4 bayt, char tipinin de 1 bayt yer kapladığını varsayalım. Her bir hücre 1 bayt alanı temsil etsin. Değişkenler için ayrılan hafıza alanı 4300 adresinden başlasın. 4

Hafıza Yapısı 5 Bir değişken tanımlandığında hafızada onun için gereken alan rezerve edilir. Örn. int num1 tanımlaması, bellekte uygun bir yerde 2 bayt alanın num1 değişkeni için ayrılmasını sağlar. Daha sonra num1 değişkenine 5 değeri atandığında ayrılan hafıza alanına 5 değeri kaydediliyor. Aslında, num1 ile ilgili yapacağınız bütün işlemler, 4300 adresiyle 4302 adresi arasındaki bellek hücrelerinin değişmesiyle alakalıdır. Değişken dediğimiz; uygun bir bellek alanının, bir isme revize edilip, kullanılmasından ibarettir. 5

Pointer Tanımlama 6 Bir veri bloğunun bellekte bulunduğu adresi içeren (gösteren) veri tipidir. veri_tipi *p; p değişkeni <veri_tipi> ile belirtilen tipte bir verinin bellekte saklandığı adresi içerir. int *iptr; float *fptr; Dikkat edilmesi gereken tek nokta; pointer'ı işaret edeceği değişken tipine uygun tanımlamaktır. Yani float bir değişkeni, int bir pointer ile işaretlemeye çalışmak yanlıştır! 6

Pointer Tanımlama 7 Bir pointer ın var olan bir değişkenin bulunduğu adresi göstermesi için değişkenin adresinin pointer a atanması gerekir. Bunun için değişkenin hafızada tutulduğu adresin bilinmesi gerekir. Bu da adres operatörü (&) ile mümkündür. &y y değişkeninin adresini verir. int y = 5; int *yptr; yptr = &y; 7

Pointer Tanımlama 8 Pointer bir değişkenin adresinin gösterir şekilde atandıktan sonra o pointer, ilgili değişkeni işaret eder. Eğer bahsettiğimiz değişkenin sahip olduğu değeri pointer ile göstermek veya değişken değerini değiştirmek isterseniz, pointer başına '*' getirerek işlemlerinizi yapabilirsiniz. Pointer başına '*' getirerek yapacağınız her atama işlemi, değişkeni de etkileyecektir. 8

Pointer Tanımlama 9 9

Değişkene Pointer ile Erişme 10 Pointer kullanarak, değişkenlerin sakladığı değerleri de değiştirebiliriz. Bir işaretçinin gösterdiği adresteki veriye erişmek için işaretçi değişkeninin önüne * karakteri eklenir. 10

Değişkenleri Pointer ile İlişkilendirme 11 11

Değişkene Pointer ile Erişme 12 Bir pointer'in işaret ettiği değişkeni program boyunca sürekli değiştirebilirsiniz. 12

Pointer Tanımlama 13 Bir pointer ın boş bir veri bloğunu göstermesi için malloc fonksiyonu kullanılır. Bu yolla veriler için dinamik yer ayrılır. malloc(n) Boş bellekten n bayt yer ayırıp başlangıç adresini döndürür. iptr = (int*) malloc(sizeof(int)); ya da iptr = (int*) malloc(4); 13

Pointer Boyutu 14 Pointer lar genelde sabit boyutta yer kaplar. Örneğin 32 bit bir sistemde genellikle pointer lar 32 bit olur. 14

Pointer Tutan Pointer lar 15 Pointer'lar, gördüğümüz gibi değişkenleri işaret ederler. Pointer'da bir değişkendir ve onu da işaret edecek bir pointer yapısı kullanılabilir. Pointer değişkenini işaret edecek bir değişken tanımlıyorsanız; başına '**' getirmeniz gerekir. Buradaki * sayısı değişebilir. Eğer, pointer işaret eden bir pointer'i işaret edecek bir pointer tanımlamak istiyorsanız, üç defa yıldız ( *** ) yazmanız gerekir. 15

Pointer Tutan Pointer lar 16 16

Pointer Aritmetiği 17 İşaretçi değişkenler üzerinde toplama ve çıkartma işlemleri (++, --) geçerlidir. Ancak eklenecek değer tamsayı olmalıdır. İşaretçi değişkenin değeri 1 arttırıldığı zaman değişken bir sonraki veri bloğunu işaret eder. Değişkenin alacağı yeni değer işaretçi değişkenin ne tip bir veri bloğunu işaret ettiğine bağlıdır. int i, *iptr; iptr = &i; // iptr örneğin 1000 nolu adresi gösteriyorsa iptr += 2; // Bu işlemden sonra iptr ın yeni değeri 1008 (iptr+2*4) Çünkü int tipi hafızada 4 bayt yer kaplıyor. 17

Pointer Aritmetiği 18 18

Pointer Aritmetiği 19 int i, *iptr; iptr = &i; // iptr örneğin 1000 nolu adresi gösteriyorsa (*iptr) ++; // Bu işlem 1000 nolu adresin içeriğini 1 artırır. iptr ++; // Bu işlem iptr nin 1004 nolu adresi göstermesini sağlar (*iptr) +=2; // Bu işlem 1000 nolu adresin içeriğini 2 artırır. (*iptr) =7; // Bu işlem 1000 nolu adresin içeriğini 7 yapar. *(iptr+2) = 5; //iptr 1000 nolu adresi gösteriyorsa 1008 nolu adresin içeriğini 5 yapar. 19

Pointer Aritmetiği 20 20

Diziler ile Pointer Arası İlişki 21 iptr örneğin 1000 nolu adresi gösteriyorsa Bir dizi adı sabit bir pointer gibi düşünülebilir. Diziler ile pointer lar yakından ilişkilidir. Pointer lar değişkenleri gösterdikleri gibi, dizileri de gösterebilirler. int dizi [6]; int *ptr; Dizi ve pointer ı eşitlemek için dizinin adı kullanılabilir. Çünkü dizi adı aslında o dizinin ilk elemanının adresidir. ptr = dizi; //Artık ptr[0] ve dizi[0] eşittir. Aynı işlemi ptr= &dizi [0] şeklinde de yapabiliriz. 21

Diziler ile Pointer Arası İlişki 22 22

Diziler ile Pointer Arası İlişki 23 Dizi gösteren pointer lar ile dizinin elemanlarına ulaşmak için: *(ptr + n) n sayısı dizinin n. indisini gösterir. *(ptr + 4) dizinin 4. indisindeki eleman yani dizi[4] Diğer alternatif gösterimler ptr[4] *(dizi + 4) 23

Diziler ile Pointer Arası İlişki 24 24

Diziler ile Pointer Arası İlişki 25 25

Diziler ile Pointer Arası İlişki 26 26

Diziler ile Pointer Arası İlişki 27 Diziler pointer içerebilirler. Pointer tutan diziler sayesinde birden fazla diziye erişim yapılabilir. Pointer tutan diziye dizilerin başlangıç adreslerini atamak yeterlidir. Pointer tutan dizi üzerinde yapılan değişiklik orijinal diziyi etkiler. 27

Diziler ile Pointer Arası İlişki 28 28

29 29

Gelecek Hafta 30 İşaretçiler Değer Yoluyla Çağırma Referans Yoluyla Çağırma Dinamik Bellek Yönetimi 30

Kaynaklar 31 Doç. Dr. Fahri Vatansever, Algoritma Geliştirme ve Programlamaya Giriş, Seçkin Yayıncılık, 12. Baskı, 2015. Kaan Aslan, A dan Z ye C Klavuzu 8. Basım, Pusula Yayıncılık, 2002. Paul J. Deitel, C How to Program, Harvey Deitel. A book on C, All Kelley, İra Pohl 31

32 S o r u l a r? Dinlediğiniz için teşekkürler CANER ÖZCAN canerozcan@karabuk.edu.tr