1 / 33

BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 7 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)

BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 7 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal). İş aret ç iler ( Pointers) (Adres Saklayan Değişkenler). “ Pointer”lar ço k g üç l ü d ü rler ama onlar ı do ğ ru kullanabilmeyi öğ renmek zaman al ı r.

Télécharger la présentation

BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 7 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. BM-104 Nesneye Yönelik Programlama Bahar2013 (7. Sunu) (Yrd. Doç. Dr. Deniz Dal)

  2. İşaretçiler (Pointers)(Adres Saklayan Değişkenler) • “Pointer”larçok güçlüdürleramaonları doğrukullanabilmeyiöğrenmekzaman alır. • “Pointer”larfonksiyonlarareferanslaparametreaktarma amaçlıkullanılabilirler. • Dahaöncekiderslerimizde gördüğümüz diziler (arrays) statikveri yapılarındandı. “Pointer”lardinamikveri yapılarıoluşturmakvemanipuleetmekiçin kullanılabilirler. • “Pointer”larsonraki slidelarımızda göreceğimizüzeredizilervestringlerle yakın birilişkiyesahiptirler.

  3. Pointer DeğişkeniDeklare Etmeveİlk DeğerAtama • “Pointer”larda değişkenlerdiramadeğerolarakbellekadreslerinisaklarlar. • Şimdiyekadar gördüğümüz değişkenler belli değerleridepoluyorlardı. (Doğrudan Referans-DirectReference) • “Pointer”larise belli bir değeridepolayan değişkenlerinadreslerinisaklarlar. (Dolaylı Referans-Indirect reference) • Dolaylama (indirection)dediğimizşey yardımıyla“pointer”larıkullanarakbir değişkeni refereedebiliriz.

  4. inty=5; int*yPtr=&y;

  5. Pointer Değişkeni Deklare Etme ve İlk Değer Atama (Devam) • “Pointer”ların Deklare Edilmesi: • “*”karakteri (asterisk) bir pointer değişkeniniişareteder. • Örnek : • int *myPtr; //myPtr is a pointer to an integer • char*myPtr; //myPtr is a pointer to acharacter • Birdenfazla pointer birdenfazla asterisk işaretigerektirir. • int *myPtr1, *myPtr2; • “Pointer”lara İlk Değer Atanması(initialization): • “Pointer”lar 0 (sıfır), NULL ya da biradresi ilk değerolarak alırlar. • 0 veya NULL hiçbirşeyiişaretetmez.

  6. ProgramlamaPratiği • Belkibirzorunluluk değildirama, bir pointer değişkeni tanımlarken değişken adının içinde“Ptr”karakterlerinikullanmakprogramcıya büyük kolaylıklarsağlar. (Neden?) (Daha önceki derslerimizde gördüğümüz notasyonları hatırlayınız.)

  7. Pointer Operatörleri • AdresOperatörü (&) • “Operand”ının (işleneninin) bellektekiadresinigeriye döndürür. • Örnek: • int y=5;int *yPtr;yPtr=&y; • Son deyim, y değişkenininbellektekiadresini pointer değişkeniolanyPtryeatar. • Artık yPtrbellekteki y değişkeniniişareteder. (yPtr “points to” y)

  8. Pointer Operatörleri (Devam) • “*” Operatorü • int y=5;int *yPtr;yPtr=&y; • Dolaylama (indirectionveya dereferencing)operatörüolarak da adlandırılır. • (*yPtr), y değişkeninin değerini yani 5 sayısınıgeriyedöndürür. (Çünkü yPtryyiişareteder.)

  9. FonksiyonlaraParametreAktarılması • Fonksiyonlara 3 farklışekildeparametreaktarılabilir: • Değerle (pass-by-value) • Referansla (pass-by-reference with reference arguments) • Pointer referansıyla (pass-by-reference with pointer arguments) • Birfonksiyonsadece ve sadecebir değeri return deyimiilegeri döndürebilir. • Birfonksiyonareferanslaparametregöndererek orijinal değerlerifonksiyoniçinde değiştirmeimkanımız olurve böylecefonksiyondançıktığımızdafonksiyonuçağıranabirdenfazla değeri return etmişoluruz.

  10. Pointer Referansıyla Fonksiyonlara Parametre Aktarılması • Fonksiyonlara referansla parametre iletilmesine benzer. • Parametre, adresiilebirlikte (&operatörü yardımıyla) fonksiyondakullanılır. • Diziler, fonksiyonargümanıolarakadresoperatörü (&) ilebirlikte gönderilmezler. (Çünküdizi adlarızatenbellek adresleridir.)

  11. int n=sayi ataması gerçekleştirilir arka planda ve sayinin kopyası kullanılır.

  12. int &n=sayi ataması gerçekleştirilir arka planda ve sayinin takma isimli orijinali kullanılır.

  13. int *nPtr=&sayi ataması gerçekleştirilir arka planda ve sayinin adresi (orijinali) kullanılır.

  14. Toplu Halde

  15. Pointer Aritmetiği • Pointer değişkenleriüzerinde artırma/azaltmaoperatörlerinikullanabiliriz. (++veya--) • Bir pointer değişkeninebir integer değeriekleyipçıkarabiliriz. (+veya+=,-veya-=) • İki pointer değişkeninibirbirindençıkarabiliriz. Pointer aritmetiğinisadecebirdiziyiişaretedenpointerlarüzerindeuygulayabiliriz.

  16. Pointer Aritmetiği • Örnek: • 5 elemanlı, integer değerlersaklayanbirdizive integer değişkenlerini4 byteüzerindensaklayanbirbilgisayar düşünelim. • Kabul edelimkivPtr pointerıbellekte 3000 adresindedizinin ilk elemanıolan v[0] ıişaretediyor. vPtr=v;veyavPtr=&v[0]; • vPtr+=2işlemivPtr pointer değişkenine 3008 değeriniatar. (3008=3000+2*4) • vPtr artık v[2]yiişareteder. • Örnek: (Pointer larüzerindeçıkarma işlemi) • EğervPtr2=&v[2];vevPtr1=&v[0];isevPtr2–vPtr1çıkarma işlemi2sonucunuverirvebusonuç bize, buikiadresarasındakaçelemansaklandığını gösterir. (vPtr2=vPtr1+2)

  17. Pointer Aritmetiği • Pointerlaratamaoperatörü (=) ilebirliktekullanılabilirlerancakbu durum iki pointer değişkeninin de aynıveritipinesahipolmasıdurumundageçerlidir. Eğerveritiplerifarklıiseçevirmeişlemiiçin cast operatorükullanılmakzorundadır.

  18. PointerlarveDiziler Arasındakiİlişki • Dizilervepointerlarbirbirleriyleçok yakındanilişkilidirler. • Birdizinin adısabit (constant) bir pointer gibi düşünülebilir. • Pointerlardizilerüzerindeindisoperasyonlarıiçin kullanılabilirler.

  19. PointerlarveDiziler Arasındakiİlişki • Birdizininelemanlarına pointer yardımıylaulaşma: • Örnek: int b[5];int *bPtr;bPtr=b; • b[n]elemanına*( bPtr+n)ile de ulaşılabilir. Buna pointer/offset notasyonudenir. • Bellektekiadresleranlamında&b[3]ilebPtr+3aynışeyiifadeeder.

  20. Pointerlar kare parantezler ve indislerle, benzer şekilde dizi değişkenleri de pointer/offsetnotasyonu ile kullanılabilirler.

  21. “const”ın PointerlarlaBirlikteKullanımı • Birfonksiyona pointer değişkenliargüman göndermekiçin 4 yolvardır: • Non-constant pointer to non-constant data (Sabit olmayan pointer, sabit olmayan veri) • Data (veri) dereferenced pointer yardımıylamodifiyeedilebilir. • Pointer başkabirveriyiişaretedebilmeküzere değiştirilebilir. • Pointer deklarasyonu “const” içermez. karPtr = ; char *karPtr; (*karPtr) = ;

  22. Sorular, Sorular, Sorular..... Soru1: Herhangi bir karakterin küçük mü veya büyük mü olduğunu nasıl test edersiniz? <cctype> include edilerek if(islower) if(isupper) if(isalpha(c)&&(c==tolower(c))) if(isalpha(c)&&(c==toupper(c)))

  23. Sorular, Sorular, Sorular..... Soru2: Herhangi bir sayının tamsayı mı veya ondalıklı sayı mı olduğunu nasıl test edersiniz? ceil veya floor gibi herhangi bir yuvarlama fonksiyonu kullanılarak if(x==ceil(x)) if(x!=floor(x))

  24. “const”ın PointerlarlaBirlikteKullanımı • Non-constant pointer to constant data (Sabit olmayan pointer, sabit veri) • Pointer değişkeni değerini değiştirebilir. • Amabu pointerın işaretettiği değişkenin değeribu pointer yardımıyla değiştirilemez. • Pass-by-reference ilesağlananperformansve pass-by-value ilesağlanan güvenlikbukullanımın artılarıdır. karPtr = ; const char *karPtr; X (*karPtr) = ;

  25. “const”ın PointerlarlaBirlikteKullanımı • Constant pointer to non-constant data (Sabit pointer, sabit olmayan veri) • Pointer değişkenidaimaaynıbellekadresiniişareteder. Yani pointer değişkeninin değeri değiştirilemez. • Ama pointerın işaretettiği değişkenin değeri pointer yardımıyla değiştirilebilir. • Böyle bir pointerdeğişkeninine başlangıçta bir değeratanmalıdır. karPtr = ; X char*const karPtr = &x; (*karPtr) = ;

  26. “const”ın PointerlarlaBirlikteKullanımı • Constant pointer to constant data (Sabit pointer, sabit veri) • Pointer değişkenidaimaaynıbellekadresiniişareteder. Yani pointer değişkeninin değeri değiştirilemez. • Benzerşekilde pointerınişaretettiği değişkenin değeri de pointer yardımıyla değiştirilemez. X karPtr = ; const char*const karPtr = &x; X (*karPtr) = ;

  27. Neler Oluyor??? a bPtr cPtr dPtr 003CFC40 003CFC4C 003CFC40 003CFC34 7 003CFC34 003CFC4C

More Related