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

Benzer belgeler
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

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

Yrd. Doç. Dr. Caner ÖZCAN

Genel Programlama II

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

Hafta 13 Fonksiyonlar

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

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

ALGORİTMA VE PROGRAMLAMA II

Yrd. Doç. Dr. Caner ÖZCAN

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

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

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

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

Hafta 7 C Programlama Diline Giriş ve C Derleyicisi

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

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Genel Programlama II

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Göstericiler (Pointers)

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

Pointer Kavramı. Veri Yapıları

Hafta 12 Karakter Tutan Diziler

Yrd. Doç. Dr. Caner ÖZCAN

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

Hafta 4 Döngü Yapıları

ALGORİTMA VE PROGRAMLAMA II

YZM 2116 Veri Yapıları

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

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

Temel Bilgisayar Programlama

Hafta 11 Çok Boyutlu Diziler

8. İŞARETCİLER (POINTERS)

Malloc () ve Free() fonksiyonları

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

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

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II

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

Pointers (İşaretçiler)

Bölüm 9. Altprogramlar ISBN

Yrd. Doç. Dr. Caner ÖZCAN

ALGORİTMA VE PROGRAMLAMA I

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

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

C Programlama Dilininin Basit Yapıları

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

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10

ALGORİTMA VE PROGRAMLAMA I

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

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

Öğr. Gör. Musa AYDIN Fatih Sultan Mehmet Vakıf Üniversitesi

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

Adı Soyadı Öğrenci No. Toplam (100p) 2 (10p) +10p. 5 (25p) +10p. 3 (20p) 4 (25p) 1 (20p)

YZM 2116 Veri Yapıları

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı Đlkbahar Dönemi 13 Nisan Ad, Soyad Öğrenci No.

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

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

Sunum İçeriği. Programlamaya Giriş

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

NESNEYE YÖNELİK PROGRAMLAMA

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

Hafta 5 Algoritma Örnekleri ve Analizi

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

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

1 PROGRAMLAMAYA GİRİŞ

3.1 Pointer in Yararları

Bilgisayar Programlama. 1.Hafta

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

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

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

C++ Dersi: Nesne Tabanlı Programlama

BİLG Dr. Mustafa T. Babagil 1

Özyineleme (Recursion)

Final Sınavı Soruları Güz, Süre: 90 Dakika

ALGORİTMA VE PROGRAMLAMA II

Dr. Fatih AY Tel: fatihay@fatihay.net

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

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Programlama Dilleri 1. Ders 5: Göstericiler

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

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

BLM 111 Algoritma ve Programlama I Güz 2018

Adım Adım C-II. Eksik kalmış konular

BİL-142 Bilgisayar Programlama II

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

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

// hataları işaret eden referans

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

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

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

Transkript:

1 BLM 112- Programlama Dilleri II Hafta 5 İşaretçiler (Pointers) Dr. Öğr. Üyesi Caner Özcan Hiç hata yapmayan insan, hiçbir şey yapmayan insandır. Ve hayatta en büyük hata, kendini hatasız sanmaktır. ~Y. Emre

Fonksiyonu Değer ya da Referans ile Çağırma (Call by Value or Reference) Bir fonksiyona gönderilen parametrenin normalde değeri değişmez. Fonksiyon içinde yapılan işlemlerin hiçbiri argüman değişkeni etkilemez. 2 Sadece değişken değerinin aktarıldığı ve argümanın etkilenmediği bu duruma, "call by value" veya "pass by value" adı verilir. Bir fonksiyondan birden fazla değer döndürülmesi veya fonksiyonun içerisinde yapacağımız değişikliklerin parametre değişkene yansıması gereken durumlar olabilir. 2

Fonksiyonu Değer ya da Referans ile Çağırma (Call by Value or Reference) 3 İşte bu gibi zamanlarda, "call by reference" veya "pass by reference" olarak isimlendirilen yöntem kullanılır. Argüman değer olarak aktarılmaz; argüman olan değişkenin adres bilgisi fonksiyona aktarılır. Bu sayede fonksiyon içerisinde yapacağınız her türlü değişiklik argüman değişkene de yansır. 3

Fonksiyonu Değer ile Çağırma (Call by Value) 4 4

Fonksiyonu Referans ile Çağırma (Call by Reference) 5 5

Fonksiyonu Referans ile Çağırma (Call by Reference) 6 Eğer yazdığınız fonksiyon birden çok değer döndürmek zorundaysa, referans yoluyla aktarım zorunlu hâle geliyor. Çünkü return ifadesiyle sadece tek bir değer döndürebiliriz. Örneğin bir bölme işlemi yapıp, bölüm sonucunu ve kalanı söyleyen bir fonksiyon yazacağımızı düşünelim. Bu durumda, bölünen ve bölen fonksiyona gidecek argümanlar olurken; kalan ve bölüm geriye dönmelidir. return ifadesi geriye tek bir değer vereceğinden, ikinci değeri alabilmek için referans yöntemi kullanmamız gerekir. 6

Fonksiyonu Referans ile Çağırma (Call by Reference) 7 7

Dinamik Bellek Yönetimi 8 Bir program çalıştırıldığında işletim sistemi programın çalışması için bir alan ayırır (stack ve heap). Stack, fonksiyonlar ve onların yerel değişkenlerinin tutulduğu yerdir. Heap, program için ayrılan ve çalışma zamanında hafıza alanı açmak için kullanılan boş alandır. 8

Stack (Yığın) ve Heap (Öbek) 9 Yığın ve öbek belleğin mantıksal parçalarıdır. Yığın LIFO (Last In First Out) mantığında çalışır. Bir kutu olarak düşündüğünüzde kutuya koyduğunuz kitaplar üst üste eklenirken, son koyduğunuz kitaba ilk erişirsiniz. Heap ise program için ayrılmış olan ve programcının sorumluluğunda kullanılan bellek bölümüdür. 9

Stack (Yığın) ve Heap (Öbek) 10 Yığın içerisinde değer tipi değişkenleri, işaretçi değişkenleri ve kod adreslerini saklar. Yığın daha hızlıdır. Çalışma mantığı basittir ve elemanlar sıralı biçime yerleştirilmiştir. 10

Stack (Yığın) ve Heap (Öbek) 11 İşaretçiler tarafından gösterilen bellek alanları ise öbek alanında saklanır. Öbek daha yavaştır. Öbekteki nesneye erişmek için karmaşık arama işlemi yapılmalıdır. 11

Dinamik Bellek Yönetimi 12 Şimdiye kadar yazdığımız programlarda örneğin dizi oluştururken dizinin boyutu önceden belliydi. Ancak dizi elemanı sayısı sabit olmayan ve önceden kestiremediğimiz bir durum varsa ve biz ne olur ne olmaz diyerek dizi eleman sayısı olarak büyük bir sayı atarsa bu seferde hafızayı boş yere işgal etmiş olacağız. Çözüm dinamik bellek yönetimi kullanmaktır. 12

Dinamik Bellek Yönetimi 13 Dinamik bellek yönetiminde program akışında ihtiyaç duyulan bellek miktarı belirlenir. Dinamik bellek yönetimi için malloc(), calloc() ve realloc() olmak üzere üç fonksiyon kullanılır. Her üç fonksiyon da stdlib kütüphanesinde bulunur. Bu yüzden fonksiyonlardan herhangi birini kullanacağınız zaman, programın başına #include<stdlib.h> yazılması gerekir. 13

Malloc() Fonksiyonu 14 Malloc fonksiyonu bir değişken için hafızadan bir blok yer ayrılması için kullanılır. Eğer hafızada yeterli alan yoksa fonksiyon NULL döndürür. int *ptr; ptr = (int *) malloc(n*sizeof(int)); 14

Calloc() Fonksiyonu 15 Calloc fonksiyonu da hafıza bloğu almak için kullanılabilir. Eğer hafızada yeterli alan yoksa fonksiyon NULL döndürür. Malloc fonksiyonundan farklı olarak argüman listesi değişmektedir. char *ptr; ptr = (char *)calloc(10, sizeof(char)); 15

Realloc() Fonksiyonu 16 Realloc fonksiyonu hafızadan ayrılan bir alanı yeniden boyutlandırmak için kullanılır. Tekrar ayarlanacak hafıza alanının başlangıcını işaret edecek bir pointer ve yeni boyut bilgisini parametre olarak alır. void *realloc(void *ptr, size_t size); Realloc fonksiyonu daha önce tahsis edilen bloğun hemen altında sürekliliği bozmayacak şekilde tahsisat yapar. Eğer daha önce tahsis edilen bloğun altında yeterli alan yoksa bellekte bloğun tamamı için yer arar. Yeterli hafıza alanı bulursa bloğun tamamını hafızada o bölgeye taşır. Eskisini siler. Yeterli alan bulamaz ise NULL döndürür. 16

Realloc() Fonksiyonu 17 Eğer realloc fonksiyonu yeterli yer bulamayıp bloğu başka yere taşırsa bu durumda geri dönüş değerini aynı işaretçiye atamak gerekir. Çünkü bu durumda bloğun başlangıç adresi değişmektedir. char *ptr; ptr = (char *)calloc(10, sizeof(char)); ptr = realloc (ptr, 20*sizeof(char)); 17

Free() Fonksiyonu 18 Gelişmiş programlama dillerinde ( örneğin, Java, C#, vb... ) kullanılmayan nesnelerin temizlenmesi otomatik olarak çöp toplayıcılarla ( Garbage Collector ) yapılmaktadır. Ne yazık ki C programlama dili için bir çöp toplayıcı yoktur ve iyi programcıyla, kötü programcı burada kendisini belli eder. 18

Free() Fonksiyonu 19 Büyük boyutta ve kapsamlı bir program söz konusuysa, efektif bellek yönetiminin ne kadar önemli olduğunu daha iyi anlarsınız. Gereksiz tüketilen bellekten kaçınmak gerekmektedir. Malloc ve calloc fonksiyonlarıyla hafızadan ayrılan alanın tekrar heap alanına serbest bırakılması için kullanılır. int *ptr; ptr = (int *) malloc(n*sizeof(int)); free(ptr); 19

Örnek 1 20 20

Örnek 2 21 21

Örnek 2 22 22

Gelecek Hafta 23 İşaretçiler ile ilgili örnekler 23

Kaynaklar 24 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 24

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