Yrd. Doç. Dr. Caner ÖZCAN

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

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

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

Yrd. Doç. Dr. Caner ÖZCAN

Genel Programlama II

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

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

ALGORİTMA VE PROGRAMLAMA II

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

Genel Programlama II

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

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Pointer Kavramı. Veri Yapıları

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

YZM 2116 Veri Yapıları

Göstericiler (Pointers)

Hafta 13 Fonksiyonlar

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

Yrd. Doç. Dr. Caner ÖZCAN

8. İŞARETCİLER (POINTERS)

ALGORİTMA VE PROGRAMLAMA II

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

ALGORİTMA VE PROGRAMLAMA II

Yrd. Doç. Dr. Caner ÖZCAN

ALGORİTMA VE PROGRAMLAMA II

Bölüm 9. Altprogramlar ISBN

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

Temel Bilgisayar Programlama

Pointers (İşaretçiler)

Malloc () ve Free() fonksiyonları

NESNEYE YÖNELİK PROGRAMLAMA

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

C Programlama Dilininin Basit Yapıları

ALGORİTMA VE PROGRAMLAMA I

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

YZM 2116 Veri Yapıları

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10

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.

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

BİLG Dr. Mustafa T. Babagil 1

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

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

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

Sunum İçeriği. Programlamaya Giriş

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

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

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

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

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

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

ALGORİTMA VE PROGRAMLAMA I

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

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

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

Algoritma Geliştirme ve Veri Yapıları 8 Kuyruk ve Yığın Yapısı. Mustafa Kemal Üniversitesi

ZAFİYET TESPİTİ VE SIZMA YÖNTEMLERİ. Eyüp ÇELİK Bilgi Teknolojileri Güvenlik Uzmanı

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

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

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

BİL-142 Bilgisayar Programlama II

// hataları işaret eden referans

C++ Dersi: Nesne Tabanlı Programlama

Programlama Dilleri 1. Ders 5: Göstericiler

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

Özyineleme (Recursion)

1 PROGRAMLAMAYA GİRİŞ

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

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

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

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

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ

ALGORİTMA VE PROGRAMLAMA II

3.1 Pointer in Yararları

Operator Aşırı Yükleme (Operator OverLoading)

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

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Operatörlere Yeni İşlevler Yüklenmesi (Operator Overloading)

Yrd. Doç. Dr. Caner ÖZCAN

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

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

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

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.

ÜNİTE. NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA İÇİNDEKİLER HEDEFLER METOTLAR

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

Nesne Yönelimli Programlama

NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş

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

Bölüm 9. Altprogramlar ISBN

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

YZM 2116 Veri Yapıları

Dr. Fatih AY Tel: fatihay@fatihay.net

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Transkript:

Yrd. Doç. Dr. Caner ÖZCAN

Fonksiyonu Referans ile Çağırma (Call by 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. 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. İş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. 2

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

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

Fonksiyonu Referans ile Çağırma (Call by Reference) 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. 5

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

Dinamik Bellek Yönetimi 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, global statik değişkenler, 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. 7

Stack (Yığın) ve Heap (Öbek) 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. 8

Stack (Yığın) ve Heap (Öbek) 9

Stack (Yığın) ve Heap (Öbek) Yığın içerisinde değer tipi değişkenleri, işaretçi değişkenleri ve kod adreslerini saklarken, işaretçiler tarafından gösterilen bellek alanları ise öbek alanında saklanır. Yığın daha hızlıdır. Çalışma mantığı basittir ve elemanlar sıralı biçime yerleştirilmiştir. Öbek daha yavaştır. Öbekteki nesneye erişmek için karmaşık arama işlemi yapılmalıdır. 10

Stack (Yığın) ve Heap (Öbek) 11

Stack (Yığın) ve Heap (Öbek) 12

Dinamik Bellek Yönetimi Ş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. 13

Dinamik Bellek Yönetimi Dinamik bellek yönetiminde program akışında ihtiyaç duyulan bellek miktarı belirlenir. Dinamik bellek yönetimi için calloc(), malloc() 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. 14

malloc 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)); 15

calloc 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)); 16

realloc 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); 17

free 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 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. Alloc ve malloc 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

Örnek-2 21

Örnek-2 22