Pros and Cons of Pointers. Pointers. Avantajlar. Dezavantajlar



Benzer belgeler
En kucuk calisabilir birime satetement denir Statements semicolon (;) ile sonlanir Yalniz basina ; null statement i ifade eder

const objects & const member functions const objects ve const functions Data Member Initializer List Data Member Initializer List

C++ Statements. { ve } arasında ifade edilen bir dizi statement bir compound statement (birleşik ifade) oluşturur.

10/17/2007 Nesneye Yonelik Programlama 3.1

const objects & const member functions

Göstericiler (Pointers)

C++ Class larina baslangic. C++ Versus C Object-oriented Language C++ Structure dan Object Create etmek. Structure tanimlama.

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

İşaretciler - Pointer

Pointer Kavramı. Veri Yapıları

Bölüm 10 - Yapılar, Birlikler, Bit İşleme ve Sayma Sabitleri (Enumarations)

BİLG Dr. Mustafa T. Babagil 1

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

BBS 514 YAPISAL PROGRAMLAMA (STRUCTURED PROGRAMMING)

C++ Operatörler (Operators)

FBEB-512. C++ ile Nesne Tabanlı Programlama. Güz (5. Hafta)

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü BİL 203 Veri Yapıları ve Algoritmalar I

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

Pointers (İşaretçiler)

Ne zaman operator overloading yapilir. Operator Overloading

C++ Dersi: Nesne Tabanlı Programlama

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

C++ Dersi: Nesne Tabanlı Programlama

BBS 514 YAPISAL PROGRAMLAMA (STRUCTURED PROGRAMMING)

Inheritance. Inheritance (turetim)

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

#include <stdio.h> int main(void) { float sayi; float * p; p = &sayi; printf("deger girin:"); scanf("%f", p); printf("girilen deger:%f\n", *p);

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

C++ Dersi: Nesne Tabanlı Programlama

TEMPLATES. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

Object-Oriented Oriented Design (OOD) Procedure Based Programlama. OOD Ana Ozellikleri

işlemler bittikten sonra dosyaların kapatılması uygun olacaktır. Bunun için, fclose(fin);

Yordamsal Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

NESNEYE YÖNELİK PROGRAMLAMA

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

BİL-142 Bilgisayar Programlama II

NESNEYE YÖNELİK PROGRAMLAMA

DERSİN WEB SİTESİ:

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

C Programlama Dilininin Basit Yapıları

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

PROGRAMLAMAYA GİRİŞ DERS 2

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

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Fall Object-Oriented Programming Laboratory 02 - Structures

Nesne Tabanlı Programlama

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

Nesne Tabanlı Programlama

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

Programlamaya Giriş Karar Yapıları, Tekrarlı İfadeler(Döngüler)

BİLGİSAYAR MÜHENDİSLİĞİ ALGORİTMA VE PROGRAMLAMA II 2.HAFTA SWİTCH (CASE), SAYAÇLAR, DÖNGÜLER,

C++ Dersi: Nesne Tabanlı Programlama

Lambda İfadeleri (Lambda Expressions)

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

C++ Dersi: Nesne Tabanlı Programlama

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

BİL1001 Bilgisayar Bilimlerine Giriş 1

Deney 7: Fonksiyon Tanımlama ve Parametre Aktarım Yöntemleri

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

Veri Yapıları ve Algoritmalar dönem

1 PROGRAMLAMAYA GİRİŞ

Object-Oriented Programming Laboratuvar 11

C++ Programming: Program Design Including Data Structures, Third Edition. Bölüm 1: Bilgisayarlar ve Programlama Dillerine Kısa Bakış

BBS515 Nesneye Yönelik Programlama. Ders 2 Zümra Kavafoğlu

Big Endian & Little Endian K.Atilla Toker İzmir Üniversitesi Meslek Yüksek Okulu Bilgisayar Programcılığı Ver:01

OPERATÖRLER Alıştırmalar

JAVADA DİZİ İŞLEMLERİ

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Alıştırma 1: Yineleme

C++ ile Nesneye Dayalı Programlama

8. İŞARETCİLER (POINTERS)

Yrd. Doç. Dr. Caner ÖZCAN

KONU 7: DOSYA İŞLEME ( File Processing )

Yrd. Doç. Dr. Caner ÖZCAN

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

BİLG Dr. Mustafa T. Babagil 1

BMH-303 Nesneye Yönelik Programlama

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

Karakter katarları ile ilgili fonksiyonlar içerir Yerel kayan noktalı sayılar tanımlanır

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

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

C derleyicisinin içeriği

C++ Dersi: Nesne Tabanlı Programlama

BBS515 Nesneye Yönelik Programlama. Ders 2 Zümra Kavafoğlu

ALGORİTMA VE PROGRAMLAMA II

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

YZM 2116 Veri Yapıları

YZM 2105 Nesneye Yönelik Programlama

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

Bölüm 6 Diziler (Arrays)

C++ Programming: Program Design Including Data Structures, Third Edition. Bölüm 3: Giriş/Çıkış

Java Programlama Dilinde Veri Tipleri. Yrd. Doç. Dr. Aybars UĞUR

11- FONKSİYONLAR (FUNCTIONS)

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

/*int sayi1, sayi2,toplam=0;

mikroc Dili ile Mikrodenetleyici Programlama Ders Notları

BİL-142 Bilgisayar Programlama II

Transkript:

Pointers Java haric, cogu programming languages memory address lerine ait abstract data type destigine sahiptirler C++ da buna pointer denir Pointers lar data structures ve parameter passing in karmasikligini artirirlar Avantaj, dezavantaj Gozlem: C ve C++ la yazili programlardaki bug larin cogu pointer hatalarindan kaynaklanmaktadir 10/21/2004 Nesneye Yonelik Programlama 5.1 Pros and Cons of Pointers Avantajlar List, queue, tree, gibi extensible ve flexible data structure larinin olusturulmasi Buyuk ve degisken buyuklu object lerin fonksiyonlara parameter passing i Dezavantajlar Bir cok programlama hatalarinin kaynagi Machine-dependent kodlara yol acabilir 10/21/2004 Nesneye Yonelik Programlama 5.2 10/21/2004 Nesneye Yonelik Programlama 5.3 10/21/2004 Nesneye Yonelik Programlama 5.4

Pointer Declaration icin Iki Farkli Style int *counterptr, counter; // a pointer to an int variable and an int variable int * counterptr1, counterptr2; // a pointer to an int variable and an int variable int *counterptr1, *counterptr2; // two pointers to int variables Pointer Initialization Pointer larin numerical degerleri genelde kullaniciya acik degildir. Degerler calisan program icinde saklidir Pointer ler nasil baslatilir Eger ozel integer degeri 0 atanirsa, belirlenmemis bir pointer degeri atanir (NULL) Address operator & kullanilarak bir object e pointer elde edilir Memory allocation operator new kullanilarak, yeni create edilen object e iliskin pointer elde edilir 10/21/2004 Nesneye Yonelik Programlama 5.5 10/21/2004 Nesneye Yonelik Programlama 5.6 Pointer Operators Address operator & Operand in address ini geri dondurur Indirection (dereferencing operator) * Pointer (address) bilgisini ilgili object in ismine donusturur Ornek: *counterptr = *counterptr + 1; CounterPtr nin icerigi degismez 0a dereference yapmak run-time error a sebep olur Pointers lere devam & ve * birbirinin inverse idir (*&identifier = = identifier ) is true (&*identifier = = identifier ) is true (*&identifier == &*identifier) is true C++ da unary operator ler (++, --, -, &, *) right associative dir. 10/21/2004 Nesneye Yonelik Programlama 5.7 10/21/2004 Nesneye Yonelik Programlama 5.8

Passing parameters to Functions Call-by-value: int square ( int value); int square ( int a[0]); Call-by-reference: void square ( int &value); int bublesort (int a[ ], int asize); Call-by-reference using pointers: void square ( int *valueptr); int bublesort ( int *a, int asize); Pointers ve Array Notation sortarray ( int array[ ], int arraysize); sortarray (int *const array, int arraysize); Yukaridaki iki decleration C++ compiler i tarafindan ayni algilanir Array in ismi arrayin ilk element ine point eden constant pointer olarak kabul edilir &array[0] ile array ayni seydir 10/21/2004 Nesneye Yonelik Programlama 5.9 10/21/2004 Nesneye Yonelik Programlama 5.10 Passing const pointers Nonconstant pointer to constant data ornek: void converttouppercase (char *); called function pointer i ve pointer in point ettigi data yi degistirebilir Nonconstant pointer to constant data ornek: void printcharacters (const char *); array a pointer gecirilerek, array in icerigi degistirilemez fakat pointer in degeri degistirilerek array taranabilir 10/21/2004 Nesneye Yonelik Programlama 5.11 Passing const pointers Constant pointer to nonconstant data Ornek: int array[100]; int *const baseptr = &array[0]; void processarray( int * const baseptr); pointer degistirilemez, fakat array in element leri pointer araci ligiyle degistirilebilir Constant pointer to constant data Ornek: int x = 5; const int *const ptr = &x; void useconstant ( const int * const ptr); function ne pointer i nede pointer in point ettigi data yi degistirebilir 10/21/2004 Nesneye Yonelik Programlama 5.12

Ornek: non-const Pointer to const Data #include <iostream.h> using namespace std; void printcharacters (const char *); int main() { char string[ ] = Print characters of a string ; printcharacters(string); return 0; } void printcharacters (const char *sptr) { for (; *sptr!= \0 ; sptr++) cout << *sptr; } 10/21/2004 Nesneye Yonelik Programlama 5.13 BubbleSort Using Call-by- Reference #include <iostream> #include <iomanip> using namespace std; void bublesort (int *, const int); void swap (int *, int *); int main( ) { const int arraysize = 10; int a[arraysize] = { 2, 6, 4, 10, 12, 89, 68, 45, 37}; bublesort (a, arraysize); for (int i=0; i < arraysize; i++) cout << setw(4) << a[i]; cout << endl; return 0; } 10/21/2004 Nesneye Yonelik Programlama 5.14 void bublesort ( int *array, const int size) { for (int pass=0; pass < size; pass++) for (int j=0; j <size-1; j++) if (array[j] > array[j+1]) swap (&array[j], &array[j+1] ); } void swap ( int *element1ptr, int *element2ptr) { int hold = *element1ptr; *element1ptr = *element2ptr; *element2ptr = hold; } sizeof Operator sizeofoperator kullanilarak variable, array ve diger object lerin byte cinsinden kapladiklari alanlar bulunur Ornek: int count; cout << sizeof count << endl; // parantheses optional sizeofoperator kullanilarak herhangi bir type ait olan object lerin kapladiklari alanlar bulunabilir Ornek: cout << sizeof (int) << endl; // parantheses required 10/21/2004 Nesneye Yonelik Programlama 5.15 10/21/2004 Nesneye Yonelik Programlama 5.16

float *ptrfloat; int *ptrint; double *ptrdouble; sizeof operator sizeof ptrfloat = sizof ptrint = sizeof ptrdouble Pointerin refer ettigi object in type i ne olursa olsun pointerin size i aynidir. Pointer Arithmetic operators Operator Semantic ++ Increment pointer by object size -- Decrement pointer by object size +, += Add multiple of object size to pointer -, -= Subtract multiple of object size from pointer - Subtract two pointers and give the difference in multiplies of the object size 10/21/2004 Nesneye Yonelik Programlama 5.17 10/21/2004 Nesneye Yonelik Programlama 5.18 Pointer Arithmetic // assume 4-byte (32-bit) integers int a[5] = { 3, 1, 8, 4, 2}; int *aptr1 = &a[0]; // point to first int *aptr2; // array element // assume aptr1 has value 3000 aptr1++; // aptr1 now has value 3004 aptr2 = aptr1 + 3; // aptr2 is now 3016 aptr1 += 2; aptr2 -= 1; cout << The pointer difference is << aptr1 aptr2 << endl; Pointer lar kullanilarak Array lere erisim int b[5]; const int *bptr; bptr = b; // same as bptr = &b[0]; Array Notation Pointer Semantic b[0] *bptr First element b[3] *(bptr+3) Fourth element &b[2] bptr+2 Address of 3 rd element b[4] bptr[4] Fifth element b[1] *(b+1) Second element 10/21/2004 Nesneye Yonelik Programlama 5.19 10/21/2004 Nesneye Yonelik Programlama 5.20

Arrays of Pointers /String Arrays char *suit[4] = { Hearts, Diamonds, Clubs, Spades }; [4] array in 4 elemeti oldugunu gosterir Her bir element char a pointer suit[0] suit[1] suit[2] suit[3] H e a r t s \0 D i a m o n d s \0 C u l u b s \0 S p a d e s \0 Strings Character constants Ornek: a, Z, \n, \0, character ler tek tirnak icinde gosterilirler character ler memory de integer lar olarak saklanirlar String constants Ornek: University of California, a, bir dizi character string ler cift tirnakla gosterilirler bellekte character dizisi seklinde saklanirlar string ismi gercekte string in ilk characterine isaret eden const pointer olarak algilanir string in son character i \0 dir 10/21/2004 Nesneye Yonelik Programlama 5.21 10/21/2004 Nesneye Yonelik Programlama 5.22 String Declaration Function lara pointer char color[]= blue ; blue ile initialize edilen array of char char color[] = { b, l, u, e, \0 }; Yukaridaki ile ayni char *colorptr = blue ; string blue yu iceren array a isaret edilen pointer olusturulur 10/21/2004 Nesneye Yonelik Programlama 5.23 Function a pointer, bir function a fuction lari parameter olarak gecirmek icin kullanilir Pointer e dereference edilerek ilgili function cagrilir Syntax: int (*compare ) (int, int) Semantics: compare isminde function a pointer tanimlanir, ilgili function type I int olan iki parametreye sahip ve geriye int cevirir int * compare (int, int) ile int (*compare ) (int, int) ayni sey degil 10/21/2004 Nesneye Yonelik Programlama 5.24

Ornek Ya ascending ya da descending order da siralama yapan bublesort functionu tanimlanacak Function pointer i kullanilarak, muhtemel iki function (ascending,descending) dan biri cagrilacak 10/21/2004 Nesneye Yonelik Programlama 5.25 10/21/2004 Nesneye Yonelik Programlama 5.26 10/21/2004 Nesneye Yonelik Programlama 5.27 10/21/2004 Nesneye Yonelik Programlama 5.28

10/21/2004 Nesneye Yonelik Programlama 5.29 10/21/2004 Nesneye Yonelik Programlama 5.30 int a[5] Array Pointers ve Function pointers arasindaki analogy // 5 elementli bir dizi tanimlanir // a ilk elemente point edwer int (*functionptr) (int) // integer geri donduren ve bir integer // parameter I olan function a pointer // tanimlanir 10/21/2004 Nesneye Yonelik Programlama 5.31 Array in ismi array in ilk element ine poin eder Array i call-by-reference ile function a gecirmek istedigimizde sadece ismine ihtiyac var Array a dereference edilerek element lere erisim saglanir Analogy (devam) Function pointer in ismi function un ilk instruction a isret eder Call-by-reference le function u baska function a parameter olarak gecirmek istedigimizde sadece ismine gerek duyulur Dereferencing function a pointer function u execute sebep olur 10/21/2004 Nesneye Yonelik Programlama 5.32

10/21/2004 Nesneye Yonelik Programlama 5.33