Yrd. Doç. Dr. Caner ÖZCAN

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

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

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

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

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

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

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

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

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

Pointer Kavramı. Veri Yapıları

Hafta 13 Fonksiyonlar

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

Hafta 7 C Programlama Diline Giriş ve C Derleyicisi

Pointers (İşaretçiler)

Hafta 12 Karakter Tutan Diziler

Hafta 11 Çok Boyutlu Diziler

8. İŞARETCİLER (POINTERS)

Hafta 4 Döngü Yapıları

ALGORİTMA VE PROGRAMLAMA II

Yrd. Doç. Dr. Caner ÖZCAN

Hafta 5 Algoritma Örnekleri ve Analizi

Göstericiler (Pointers)

Genel Programlama II

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

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

ALGORİTMA VE PROGRAMLAMA II

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

Yrd. Doç. Dr. Caner ÖZCAN

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

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

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

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

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

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

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

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

ALGORİTMA VE PROGRAMLAMA II

Diziler (Arrays) Çok Boyutlu Diziler

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

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

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

YZM 2116 Veri Yapıları

C PROGRAMLAMA D İ L İ

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

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

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

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I

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

BLM 111 ALGORİTMA VE PROGRAMLAMA I

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

HSancak Nesne Tabanlı Programlama I Ders Notları

Programlama Dilleri 1. Ders 5: Göstericiler

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

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

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

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

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

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

Nesne Tabanlı Programlama

Özyineleme (Recursion)

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

JAVADA DİZİ İŞLEMLERİ

YZM 2116 Veri Yapıları

YAPILAR (STRUCTURES)

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-7 C Programlama Diline Giriş

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

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

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

C++ Dersi: Nesne Tabanlı Programlama

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

C#(Sharp) Programlama Dili

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

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

Sunum İçeriği. Programlamaya Giriş

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.

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

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

Giriş. ENF102 Jeoloji

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.

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

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

Week 5 Examples and Analysis of Algorithms

Diziler İndisli Değişkenler

Bölüm 6. Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Nesneye Yönelik Programlama (OOP) 7.Hafta

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

Dr. Fatih AY Tel: fatihay@fatihay.net

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

PROGRAMLAMAYA GİRİŞ DERS 2

Transkript:

Yrd. Doç. Dr. Caner ÖZCAN

Hafıza Yapısı 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

Hafıza Yapısı 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ı 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 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 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 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

Pointer Tanımlama (Değişkene Pointer ile Erişme) 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

Pointer Tanımlama (Değişkenleri Pointer ile İlişkilendirme) 11

Pointer Tanımlama Bir pointer'in işaret ettiği değişkeni program boyunca sürekli değiştirebilirsiniz. 12

Pointer Tanımlama 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 Pointer lar genelde sabit boyutta yer kaplar. Örneğin 32 bit bir sistemde genellikle pointerlar 32 bit olur. 14

Pointer Tutan Pointer lar 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

Pointer Aritmetiği İş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

Pointer Aritmetiği 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

Diziler ile Pointer Arası İlişki 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. 20

Diziler ile Pointer Arası İlişki 21

Diziler ile Pointer Arası İlişki 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) 22

Diziler ile Pointer Arası İlişki 23

Diziler ile Pointer Arası İlişki 24

Diziler ile Pointer Arası İlişki 25

Diziler ile Pointer Arası İlişki *p2 = *p1; 26

Diziler ile Pointer Arası İlişki 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

29

Dip not.. Bırakın doğruları gelecek söylesin, herkesi eserlerine ve başarılarına göre değerlendirsin. Bugün onların olsun ama uğruna uğraştığım gelecek benimdir 30

31

Kaynaklar Doç. Dr. Fahri Vatansever, Algoritma Geliştirme ve Programlamaya Giriş, Seçkin Yayıncılık, 12. Baskı, 2015. J. G. Brookshear, Computer Science: An Overview 10th Ed., Addison Wisley, 2009. 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. google.com for all images. 32