Bilgisayar Programlama 1 DERS 11: POINTER (İŞARETÇİLER) DR. HÜSEYİN BAHTİYAR

Benzer belgeler
Pointers (İşaretçiler)

8. İŞARETCİLER (POINTERS)

Pointer Kavramı. Veri Yapıları

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

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

Genel Programlama II

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

Yrd. Doç. Dr. Caner ÖZCAN

Göstericiler (Pointers)

Özyineleme (Recursion)

Yrd. Doç. Dr. Caner ÖZCAN

ALGORİTMA VE PROGRAMLAMA II

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

ALGORİTMA VE PROGRAMLAMA II

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

ALGORİTMA VE PROGRAMLAMA II

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

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

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

Genel Programlama II

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

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

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

ALGORİTMA VE PROGRAMLAMA I

BİLG Dr. Mustafa T. Babagil 1

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

Programlama Dilleri 1. Ders 5: Göstericiler

C++ Göstericiler (Pointer)

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

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

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

NESNEYE YÖNELİK PROGRAMLAMA

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

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

NESNEYE YÖNELİK PROGRAMLAMA

ALGORİTMA VE PROGRAMLAMA I

C++ Dersi: Nesne Tabanlı Programlama

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

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

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

NESNEYE YÖNELİK PROGRAMLAMA

Lambda İfadeleri (Lambda Expressions)

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

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

C++ ile Nesneye Dayalı Programlama

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

C++ Dersi: Nesne Tabanlı Programlama

Bir hafıza hücresinin adres bilgisini tutmaya yarayan değiģkenlere iģaretçi adı verilir. ĠĢaretçiler aģağıdaki gibi tanımlanırlar.

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

Diziler (Arrays) Çok Boyutlu Diziler

C++ Dersi: Nesne Tabanlı Programlama

Veri Yapıları Laboratuvarı

JAVADA DİZİ İŞLEMLERİ

Sunum İçeriği. Programlamaya Giriş

Diziler İndisli Değişkenler

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

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

3.1 Pointer in Yararları

BLM 111 Algoritma ve Programlama I Güz 2018

BTEP243 Ders 3. class Yazım Kuralı:

BLM 111 ALGORİTMA VE PROGRAMLAMA I

İnternet Programcılığı Öğr. Gör. Serkan AKSU PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler

BLM 111 ALGORİTMA VE PROGRAMLAMA I

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

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

YZM 2116 Veri Yapıları

Programlama Dilleri 1. Ders 4: Diziler

YZM 2105 Nesneye Yönelik Programlama

Programlama Dilleri 1. Ders 12: Belirleyiciler ve Niteleyiciler

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

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10

NESNE MODELLERİ : SINIFLAR

ALGORİTMA VE PROGRAMLAMA II

C++ Dersi: Nesne Tabanlı Programlama

C PROGRAMLAMA D İ L İ

HSancak Nesne Tabanlı Programlama I Ders Notları

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

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

1 PROGRAMLAMAYA GİRİŞ

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir.

Dr. Fatih AY Tel: fatihay@fatihay.net

String Sınıfını Yönetmek

NESNE TABANLI PROGRAMLAMA Final Sınavı Cevapları

Statik veri üyeleri sınıf dosyası içerisinde, ancak sınıf bildirimi dışında başlatılmalıdır. Statik üye fonksiyonları

İfadeler bir programlama dilinde hesaplamaları belirtmede temel araçtır. İfadelerin değerlendirmesini anlamak için,

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

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

Bölüm 10. Altprogramların gerçeklenmesi ISBN

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

YAPILAR (STRUCTURES)

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

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

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

Hafta 13 Fonksiyonlar

ALGORİTMA VE PROGRAMLAMA II

Nesne İşaretçileri. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. Sınıf Yapısı. Kalıtım Çok Şekillilik

String ve Karakter Dizileri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

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

Transkript:

Bilgisayar Programlama 1 DERS 11: POINTER (İŞARETÇİLER) DR. HÜSEYİN BAHTİYAR 1

Pointer Nedir İşaretçiler (pointerlar) C++ dilinin en temel yapı taşlarından biridir. İşaretçiler konusu C++ ı diğer dillerden ayıran en önemli özelliklerinden biridir. C++ ta işaretçiler değişkenlerin bellekteki adreslerini tutabilme ve onlarla işlem yapabilme olanağı sağlar.

Pointerlar Pointerları, verilerin bilgisayar hafızasında tutulduğu fiziki adresi olarak tanımlayabiliriz. Donanımsal açıdan bakıldığında bu adres bellekte yer gösteren bir sayıdır. İşlemci, bellekteki bir yere o bölgenin adres bilgisiyle erişebilir. Değişkenlerin adresleri, genelde, derleyici ve işletim sistemi tarafından ortaklaşa olarak belirlenir. Değişken adresleri program çalışmadan önce kesin olarak bilinemez ve önceden tespit edilemez. Programcı adresleri ancak programın çalışması sırasında görebilir.

Pointerlar Belli bir tipte değişken tanımlanıp ve bir değer atandığı zaman, o değişkene dört temel özellik eşlik eder: değişkenin adı değişkenin tipi değişkenin sahip olduğu değer (içerik) değişkenin bellekteki adresi

int tam = 33; Pointerlar

Pointerlar Pointerlara, veriler değil, ilgili verilerin bellekte saklı olduğu bellek alanlarının başlangıç adresleri atanır. Pointer, diğer değişkenler gibi, sayısal bir değişkendir. Bu sebeple kullanılmadan önde program içinde bildirilmelidir.

Referans Operatörü Pointerlar konusunda bilmemiz gereken 2 adet önemli operatör vardır. Bunlar; Referans Operatörü & De Referans ( Referanstan ayırma) Operatörü * Pointerlar tek başlarına değer alamazlar bunun için başka bir değişkeni referans almak zorundadırlar.

Referans (Adres) Operatörü Referans (Adres) operatörü değişkenin hafızada saklandığı yeri (adresini) gösterir foo = &myvar; myvar = 25; foo = &myvar; bar = myvar;

Pointer Tanımlamak Pointerı aşağıdaki gibi tanımlayabiliriz. <Değişken Türü> *<Değişken Adı> Eğer * işaretini değişkeni tanıtırken kullanırsak, o değişkeni pointer olarak tanımlarız. Eğer program içerisinde bir değişkenin önüne eklersek, kayıtlı adres üzerindeki değeri gösterir.

Referans Operatörü Örnek int *isaret; int okul_no=453; isaret=&okul_no; isaret isimli işaretçi okul_no isimli değişkeni referans olarak alıyor, böylece isaret = okul_no adresi diyebiliriz. Genel açıdan bakarsak isaret isimli işaretçi int tipindeki herhangi bir değişkenin adresini tutabilir. isaret değişkenine okul_no nun adresini atayabilmek için pointer şeklinde tanımlamamız gerekiyor. isaret=&okul_no; işleminde okul_no değişkeninin referansının atanması için * işaretini koymuyoruz.

Pointer Örneği int ilksayi, ikincisayi; int * mypointer; mypointer = &ilksayi; *mypointer = 10; mypointer = &ikincisayi; *mypointer = 20; cout << "İlk Sayi = " << ilksayi << '\n'; cout << "İkinci Sayi = " << ikincisayi << '\n';

Pointer Örneği int değişkenlerini tanımladım int ilksayi, ikincisayi; int * mypointer; mypointer = &ilksayi; *mypointer = 10; mypointer = &ikincisayi; *mypointer = 20; cout << "İlk Sayi = " << ilksayi << '\n'; cout << "İkinci Sayi = " << ikincisayi << '\n';

Pointer Örneği int tipinde pointer tanımladım int ilksayi, ikincisayi; int * mypointer; mypointer = &ilksayi; *mypointer = 10; mypointer = &ikincisayi; *mypointer = 20; cout << "İlk Sayi = " << ilksayi << '\n'; cout << "İkinci Sayi = " << ikincisayi << '\n';

Pointer Örneği ilksayı değişkeninin adresini mypointer değişkenine atadım int ilksayi, ikincisayi; int * mypointer; mypointer = &ilksayi; *mypointer = 10; mypointer = &ikincisayi; *mypointer = 20; cout << "İlk Sayi = " << ilksayi << '\n'; cout << "İkinci Sayi = " << ikincisayi << '\n';

Pointer Örneği mypointer değerini 10 olarak atadım int ilksayi, ikincisayi; int * mypointer; mypointer = &ilksayi; *mypointer = 10; mypointer = &ikincisayi; *mypointer = 20; cout << "İlk Sayi = " << ilksayi << '\n'; cout << "İkinci Sayi = " << ikincisayi << '\n';

Pointer Örneği ikincisayi değişkeninin adresini mypointer değişkenine atadım int ilksayi, ikincisayi; int * mypointer; mypointer = &ilksayi; *mypointer = 10; mypointer = &ikincisayi; *mypointer = 20; cout << "İlk Sayi = " << ilksayi << '\n'; cout << "İkinci Sayi = " << ikincisayi << '\n';

Pointer Örneği mypointer değerini 2 olarak değiştirdim int ilksayi, ikincisayi; int * mypointer; mypointer = &ilksayi; *mypointer = 10; mypointer = &ikincisayi; *mypointer = 20; cout << "İlk Sayi = " << ilksayi << '\n'; cout << "İkinci Sayi = " << ikincisayi << '\n';

Pointer Örneği int ilksayi, ikincisayi; int * mypointer; mypointer = &ilksayi; *mypointer = 10; mypointer = &ikincisayi; *mypointer = 20; cout << "İlk Sayi = " << ilksayi << '\n'; cout << "İkinci Sayi = " << ikincisayi << '\n'; cout lar nasıl çıktı verecek?

Pointer Örneği int ilksayi, ikincisayi; int * mypointer; mypointer = &ilksayi; *mypointer = 10; mypointer = &ikincisayi; *mypointer = 20; cout << "İlk Sayi = " << ilksayi << '\n'; cout << "İkinci Sayi = " << ikincisayi << '\n'; 10 20

Pointer Örneği int ilksayi, ikincisayi; int * mypointer; mypointer = &ilksayi; *mypointer = 10; mypointer = &ikincisayi; *mypointer = 20; cout << "İlk Sayi = " << ilksayi << '\n'; cout << "İkinci Sayi = " << ikincisayi << '\n'; Peki neden? 10 20

Pointer Örneği 2 int ilksayi = 5, ikincisayi = 15; int * p1, * p2; p1 = &ilksayi; p2 = &ikincisayi; *p1 = 10; *p2 = *p1; p1 = p2; *p1 = 20; Programın çıktısı nedir? Tartışalım cout << "İlk sayi :: " << ilksayi << '\n'; cout << "İkinci Sayi :: " << ikincisayi << '\n';

Pointer ve Diziler Diziler uygun tipteki işaretçilere dönüştürülebilir. Statik değişkenler ve diziler için programın ilk çalışma anında bellekte yer ayrılır ve bu yer program bitine kadar tutulur. Pointerlar da ise bellek ayrımı derleme aşamasında değil çalışma sırasında olur. Bu şekilde kullanılan değişkenlere dinamik değişken denir.

Pointerlar ve Diziler Örnek int numbers[5]; numbers isimli 5 elemanlı bir dizi oluşturduk. int * p; p isimli pointer oluşturduk p = numbers; *p = 10; p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", ";

Pointerlar ve Diziler Örnek int numbers[5]; int * p; p = numbers; numbers dizisi p pointerını birbirine eşitledik *p = 10; p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", ";

Pointerlar ve Diziler Örnek int numbers[5]; int * p; p = numbers; *p = 10; ilk elemanı 10 yaptık p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", ";

Pointerlar ve Diziler Örnek int numbers[5]; int * p; p = numbers; *p = 10; p++; p yi 1 arttırdık *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", ";

Pointerlar ve Diziler Örnek int numbers[5]; int * p; p = numbers; *p = 10; p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", "; ikinci elemanı 20 olarak atadık

Pointerlar ve Diziler Örnek int numbers[5]; int * p; p = numbers; *p = 10; p++; *p = 20; p = &numbers[2]; numbers dizisinin 3. elemanının adresini aldık *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", ";

Pointerlar ve Diziler Örnek int numbers[5]; int * p; p = numbers; *p = 10; p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; 40 olarak atadık p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", ";

Pointerlar ve Diziler Örnek int numbers[5]; int * p; p = numbers; *p = 10; p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; Dizinin 3. elemanına eriştik *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", ";

Pointerlar ve Diziler Örnek int numbers[5]; int * p; p = numbers; *p = 10; p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", "; Dizinin 4. elemanını 50 olarak atadık

Pointer ile Dizi içinde dolaşmak int dizi[5]=11,22,33,44,55; int * p = dizi; for(int i =0; i<5; i++) cout<< dizi elemanı << dizi[i]<<endl; cout<< pointer ile <<*(p+i)<<endl; cout<< dizinin adresi <<&dizi[i]<<endl; cout<< pointer in adresi <<&p[i]<<endl;

Pointer ile Dizi içinde dolaşmak int dizi[5]=11,22,33,44,55; int * p = dizi; for(int i =0; i<5; i++) cout<< dizi elemanı << dizi[i]<<endl; cout<< pointer ile <<*(p+i)<<endl; cout<< dizinin adresi <<&dizi[i]<<endl; cout<< pointer in adresi <<&p[i]<<endl;

Dinamik diziler Pointerlar da ise bellek ayrımı derleme aşamasında değil çalışma sırasında olur. Bu şekilde kullanılan değişkenlere dinamik değişken denir. new ve delete komutları ile C++ da dinamik dizi oluşturabiliriz. new komutu ile dinamik dizi oluşturur. degisken_adi = new veritipi [eleman_sayısı]; delete komutu ile oluşturulan diziyi silebiliriz delete degisken_adi;

Dinamik Diziler Örnek int * p; p = new int [3]; p[0] =11; p[1] =22; p[2] =33; p[3] =44; cout <<p[3]<<endl; delete p;

İşaretçinin işaretçisi Şu ana dek incelediğimiz tüm işaretçiler bir değişkene yada bir sabite işaret ediyordu (adresini içeriyordu). Bir pointer ın bir başka pointer a işaret etmesi mümkündür. Bu durumdaki pointerların başında ** işleci getirilir.

char a; char * b; char ** c; a = 'z'; b = &a; c = &b; İşaretçinin işaretçisi

Fonksiyonda İşaretçiler Fonksiyonları tanımlarken parametreleri istediğimiz gibi tanımlayabiliriz. Bu parametreler işaretçi de olabilir. İki tip parametre kullanabiliriz Değer göndererek kullanılan fonksiyonlar (Call by value) Referans göndererek kullanılan fonksiyon (Call by reference)

Fonksiyonda işaretçiler 100 8

Kaynaklar!http://www.cplusplus.com/doc/tutorial/!www.py4e.com!C++ How to program (Deitel)!Ferhat Özok Bilgisayar Programlama I ders notları 40