İşaretciler - Pointer

Benzer belgeler
Göstericiler (Pointers)

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

Pointer Kavramı. Veri Yapıları

Programlama Dilleri 1. Ders 5: Göstericiler

ALGORİTMA VE PROGRAMLAMA II

Yrd. Doç. Dr. Caner ÖZCAN

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

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

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

Pointers (İşaretçiler)

Pros and Cons of Pointers. Pointers. Avantajlar. Dezavantajlar

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

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

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

Yrd. Doç. Dr. Caner ÖZCAN

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

Yrd. Doç. Dr. Caner ÖZCAN

8. İŞARETCİLER (POINTERS)

ALGORİTMA VE PROGRAMLAMA II

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

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

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

PROGRAMLAMAYA GİRİŞ DERS 2

Yrd. Doç. Dr. Caner ÖZCAN

Bölüm 2 - C ile Programlamaya Giriş

Bölüm 9. Altprogramlar ISBN

Hafta 13 Fonksiyonlar

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

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

HSancak Nesne Tabanlı Programlama I Ders Notları

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

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

HSancak Nesne Tabanlı Programlama I Ders Notları

NESNEYE YÖNELİK PROGRAMLAMA

ESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

Hafta 12 Karakter Tutan Diziler

3.1 Pointer in Yararları

C Programlama Dilininin Basit Yapıları

Giriş. ENF102 Jeoloji

BİL-142 Bilgisayar Programlama II

Özyineleme (Recursion)

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

1 PROGRAMLAMAYA GİRİŞ

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

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

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

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

Programlama Dilleri 3

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

C Programlama Dilinde Değişkenler

NESNEYE YÖNELİK PROGRAMLAMA

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

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

Dizi ( Array ) ve Dizgi ( String )

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

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

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

Java da, tüm değişkenlerin kullanılmadan önce tanımlanması edilmesi gerekir. Bir değişken tanımlamanın temel gösterimi bu şekildedir:

Programlama Dilleri 1. Ders 4: Diziler

Visual Basic 6.0. Anadolu Üniversitesi Endüstri Mühendisliği Bölümü. Değişkenler ve Veri tipleri. Ders Notları

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

BÖLÜM 11: YAPISAL VERİ TİPLERİ

Fonksiyonlar (Altprogram)

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

BİL-142 Bilgisayar Programlama II

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

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

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

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

11- FONKSİYONLAR (FUNCTIONS)

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

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

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

YZM 2105 Nesneye Yönelik Programlama

Sınav tarihi : Süre : 60 dak. c) En başta #include<stdio.h> yazılmamıştır. c) zt d) Pi e) X0

C++ Göstericiler (Pointer)

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

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

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

ALGORİTMA VE PROGRAMLAMA I

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.

C PROGRAMLAMA D İ L İ

2.2- DEĞİŞKENLER VE SABİTLER ÇALIŞMA YAPRAĞI

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

DİZİLER 5/4/2010. ENF-102 Jeoloji Giriş. Tek Boyutlu Diziler. Tek Boyutlu Diziler. Örnek. Örnek

Programlama Dilleri Laboratuvarı

Ders 8: Metotlar. barisgokce.com

C++ Dersi: Nesne Tabanlı Programlama

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

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

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

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

PASCAL PROGRAMLAMA DİLİ YAPISI

BLM 111 ALGORİTMA VE PROGRAMLAMA I

C++ ile Nesneye Dayalı Programlama

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

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

Transkript:

İşaretciler - Pointer İçindekiler Giriş Pointer değişken tanımlama ve ilk değer atama Pointer üzerinde çalışan operatörler Fonksiyonları referasnla çağırma const ifadesi ve Pointer ler Pointer İfadeler ve Pointer Aritmetik Pointers ve Array arasındaki ilişkiler Pointer Dizileri Functionları adresleyen pointerlar

Pointer Giriş Göstergeler, başka değişkenlerin bellek adreslerini depolamaya yarayan değişkenlerdir. C nin çok önemli bir gücünü ve esnekliğini oluştururlar. Ancak aynı zamanda karmaşık ve zor kullanılan bir yapıdır. call-by-reference işlemlerini gerçekleştirirken kullanılırlar. Dizi ve string lerle yakın çalışma mantığı gösterirler

Pointer Değişken Tanımlama ve İlk Değer Atama Normal değişkenler özel bir adres değeri içerir. adet 7 Pointer değişkenler Değerin hafıza adresini içerirler padet adet 7 Erişim doğrudan değil adres referansı üzerinden yapılır

Pointer Değişken tanımlama ve ilk değer atama Pointer definitions * işareti ile tanımlanır. Bu dolayı tanım (indirection) oparatörü olarak isimlendirilir. örnek tipadı *ptradı; int *pdegisken; Yukarıdaki ifade int türünde değer saklanan bir pointer değişken tanımlanır. Bir satırda iki pointer tanımlamak her değişkenin yanına * eklenmelidir. int *myptr1, *myptr2; Herhangi bir veri türünde pointer tanımlanabilir. Pointerler ilk değer olarak 0, NULL, veya bir adres alabilir. 0 veya NULL hiç birşeye işaret etmez (NULL tercih edilir.)

Pointer Operatörleri & (adres operatör) Üzerinde çalıştığı değişken veya ifadenin adresini döndürür. int y = 5; int *yptr; yptr = &y; /* yptr, y değişkeninin adresini alır*/ yptr işaret eder y yptr y 5 yptr 500000 600000 y 600000 5 Y nin adresi yptr nin değeridir.

& operatörü başka bir örnek int x,y; int *ptr; x 1000 0 y 1002 0 ptr 1004 0 y=5 x 1000 0 y 1002 5 ptr 1004 0 ptr=&y; x 1000 0 y 1002 5 ptr 1004 1002

Pointer Operatörleri * (dolaylama/referanstan ayırma) Pointerin işaret ettiği değişkeni döndürür. *yptr ifadesi y yi döndürür. (çünkü yptr y yi işaret eder.) * atama için kullanılabilir. Returns alias to an object *yptr = 7; /* changes y to 7 */ * ile tanımlı işaretçi bir değişken olmalı. Sabit olmamalıdır. "&" adres operatörü, kendisinden sonra gelen ifadenin adresini gösterir. * ve & birbirinin tersi gibi çalışır. &*p : değişkenin adresini gösterir.

int ptr= 33; Adres değerlerinin gösterimi printf("icerik: %d\n", ptr); printf("adres : %p\n",& ptr);

Gösterici Aritmetiği Göstericiler kullanılırken, bazen göstericinin gösterdiği adres taban alınıp, o adresten önceki veya sonraki adreslere erişilmesi istenebilir. Bu durum, göstericiler üzerinde, aritmetik işlemcilerin kullanılmasını gerektirir. Göstericiler üzerinde yalnızca toplama (+), çıkarma (-), bir arttırma (++) ve bir eksiltme (--) operatörleri işlemleri yapılabilir.

Gösterici Aritmetiği Aşağıdaki gibi üç tane gösterici bildirilmiş olsun: char *kar; int *tam; double *ger; Bu göstericilerin herhangi bir anda, tuttukları adresler de sırasıyla 10000 (0x2710), 20000 (0x4e20) ve 30000 (0x7530) olsun. Buna göre aşağıdaki atama işlemlerinin sonucu: kar++; tam++; ger++; sırasıyla 10001 (0x2711), 20004 (0x4e24) ve 30008 (0x7538) olur. Göstericiye 1 eklemek göstericinin bir sonraki adresi göstermesine sebep olur. http://www1.gantep.edu.tr/~bingul/c/index.php?ders=11

Fonksiyonları referansla çağırma Fonksiyonlarda pointer argüman kullanarak call by referance gerçekleştirilebilir. Adres geçişi için & operatörü kullanılabilir. Gerçek değerin hafıza üzerinden değiştirilmesini sağlar. Diziler için & kullanılmaz çünkü diziler zaten pointerdir * operatör Fonksiyonunun içindeki değişken için takma isim gibi davranır. void double( int *number ) { } *number = 2 * ( *number ); *number geçilen değişken için takma isim gibidir.

İlkel parametrelerin metot içine geçişi geçişi byval ile olur Metodun içerisinde yapılan değişiklikler metottan çıkınca kaybolur. Örnek : void main() { int x = 3; passmethod(x); İlkel veri türlerinin metotlara geçişi // print x to see if its // value has changed printf("after invoking passmethod, x = %d", x); } } // passmethod() içinde parametrelerin değiştirilmesi public static void passmethod(int p) { p = 10; } Çıktı = 3;

İlkel veri türlerinin metoda geçişi Metod int a=3; a 3 değerine sahiptir a=5

Pointerlarla bilgi geçişi Bu şekilde metodun içerisinde yapılan değişiklikler metottan çıkınca kaybolmaz. Çünkü metot içinde ve dışında aynı adres alanına referans edilir. Örnek: void movecircle(int *circle, int deltax, int deltay) { *circle=3; } Metot içinde mycircle pointerına referans edilir. Bu değişiklikler metot geri dönse de kalıcı olur.

Referans veri türlerinin metoda geçişi Metod int *p,int *y; *p=&y; *p=3 *p=10 *p 10 değerine sahiptir. Metot çağrılırken kullanılan değişken (aktüel değişken) metod içerisinde aynı nesneye (hafıza alanına) işaret ettiğinden, metot içinde değişirse metodun dışında da değişimin etkisi sürer.

Örnek İki tamsayının birbiri ile takas edilmesi http://stackoverflow.com/questions/8403447/swapping-pointers-in-c-char-int

Pointerler ile const niteleyiciler const qualifier Değiştirilemez değişkenler oluşturma amaçlı kullanılır. Eğer fonksiyonun değişkenin değerini değiştirmesi istenmiyorsa const kullanılmalıdır. const değişken değiştirilmek istenirse hata oluşur. const pointer ler Sabit bir hafıza adresini işaretler Tanımlandığı anda ilk değer atanmalıdır. int *const myptr = &x; Type int *const constant pointer to an int Veri değişebilir. Pointer değişemez. const int *myptr = &x; const int değerine işaret eden normal pointer Veri değişmez. Pointer değişebilir. const int *const Ptr = &x; const pointer işaret eder const int x değişebilir, *Ptr değişmez.

#include<stdio.h> int main(void) { int var1 = 0, var2 = 0; int *const ptr = &var1; ptr = &var2; printf("%d\n", *ptr); return 0; } Const pointer örnekler Bu kod çalışmaz. Çünkü ptr = &var2; satırı «error: assignment of read-only variable ptr» hatası verir.

Pointer Constant örnek Tanım const <type of pointer>* <name of pointer> Örnek const int* ptr; #include<stdio.h> int main(void) { int var1 = 0; const int* ptr = &var1; *ptr = 1; printf("%d\n", *ptr); } return 0; *ptr = 1; atama satırı «assignment of read-only location *ptr» hatası verir.

Constant Pointer Constant const <type of pointer>* const <name of pointer> const int* const ptr; #include<stdio.h> int main(void) { int var1 = 0,var2 = 0; const int* const ptr = &var1; *ptr = 1; ptr = &var2; printf("%d\n", *ptr); } return 0; constptr.c:7: error: assignment of read-only location *ptr constptr.c:8: error: assignment of read-only variable ptr

sizeof SizeOf İfadelerin byte cinsinden uzunluğunu döndürür. Diziler için: Tek bir elemanın büyüklüğü ile eleman sayısı çarpımıdır. Eğer sizeof( int ) 4 byte a eşitse int myarray[ 10 ]; printf( "%d", sizeof( myarray ) ); 40 yazdırır. sizeof aşağıdaki ifadelerle kullanılabilir. Değişken isimleri Tür ismi Sabit değerler sizeof ile değişken türlerinin bellekte ne kadar yer tutacağı bulunabilir.

Call-by-reference Fonksiyon Örneği void swap(int *ptr1, int *ptr2){ int hold=*ptr1; *ptr1=*ptr2; *ptr2=hold; } main (){ int a[5];. swap(&a[i],&a[i-1]); }

Pointer İfadeler ve Pointer Aritmatik Pointerler üzerinde aritmetik işlemler gerçekleştirilebilir. Increment/decrement pointer (++ or --) Add an integer to a pointer( + or +=, - or -=) Pointers may be subtracted from each other Operations meaningless unless performed on an array

Pointer İfadeler ve Pointer Aritmatik 5 eleman int dizisi 4 bit integer bir makinede vptr v dizisinin ilk elemanının adresini gösterir &v[ 0 ] 3000 adresinde (vptr = 3000) vptr += 2; sets vptr to 3008 vptr v[ 2 ] adresini gösterir (2 artarak), ancak makine 4 byte ints olduğundan, adres olarak 3008 gösterilir. location 3000 3004 3008 3012 3016 v[0] v[1] v[2] v[3] v[4] pointer variable vptr

Pointer İfadeler ve Pointer Aritmatik Pointer ların birbirinden çıkartılması Birbiri arasındaki eleman sayısını verir. vptr2 = v[ 2 ]; vptr = v[ 0 ]; vptr2 - vptr = 2 dir Pointer karşılaştırma ( <, ==, > ) Bir dizinin en üst yüksek indisli elemanını bulmak Pointer ın 0 ı adresleyip adreslemediğini kontrol etmek

Pointer İfadeler ve Pointer Aritmatik Aynı türdeki pointerler birbirine aranabilir. Eğer aynı türde değilse cast operatörü kullanılmalıdır. Harici Durum: Void gösteren pointer (type void *) Genel pointer, herhangi bir türü gösterebilir. Bir pointer ı void pointer e çevirmek için casting gerekmez. void pointer ın sonradan tekrar referansı çözülemez (dereference).

Pointer ve Diziler Arası İlişkiler C de İşaretçiler ve diziler arasında çok yakın bir ilişki vardır. Bir dizinin ismi, dizideki ilk elemanın adresini içeren sabit bir değişkendir. Pointer işlemlerde dizi indisi gibi kullanılabilir. dizi b[ 5 ] ve pointer bptr Aşağıdaki atamalar geçerlidir. bptr = b; bptr = &b[ 0 ]

b[ 3 ] Pointer ve Diziler Arası İlişkiler *( bptr + 3 ) şekline erişilebilir. bptr[ 3 ] şekline erişilebilir. pointer/subscript gösterilimi olarak isimlendirilir. bptr[ 3 ] b[ 3 ] gibidir. Dizi üzerinde pointer aritmetik kullanılarak da erişilebilir. *( b + 3 )

Outline Dizide dolaşma yöntemleri Klasik indisler kullanarak for ( i = 0; i < 4; i++ ) { printf( "b[ %d ] = %d\n", i, b[ i ] ); } /* end for */ Diziyi pointer ile gezerek (Pointer/offset yazımı Pointer array ismi olarak düşünülecektir. ) int *ptr; ptr=b; for ( i = 0; i < 4; i++ ) { printf( "b[ %d ] = %d\n", i, *p++ ); } /* end for */

Outline Program Output Array b printed with: Array subscript notation b[ 0 ] = 10 b[ 1 ] = 20 b[ 2 ] = 30 b[ 3 ] = 40 Pointer/offset yazımı Pointer array ismi olarak düşünülecektir. *( b + 0 ) = 10 *( b + 1 ) = 20 *( b + 2 ) = 30 *( b + 3 ) = 40 Pointer subscript yazılımı bptr[ 0 ] = 10 bptr[ 1 ] = 20 bptr[ 2 ] = 30 bptr[ 3 ] = 40 Pointer/offset gösterilimi *( bptr + 0 ) = 10 *( bptr + 1 ) = 20 *( bptr + 2 ) = 30 *( bptr + 3 ) = 40

1 /* Fig. 7.21: fig07_21.c 2 Copying a string using array notation and pointer notation. */ 3 #include <stdio.h> 4 5 void copy1( char *s1, const char *s2 ); /* prototype */ 6 void copy2( char *s1, const char *s2 ); /* prototype */ 7 8 int main() 9 { 10 char string1[ 10 ]; /* create array string1 */ 11 char *string2 = "Hello"; /* create a pointer to a string */ 12 char string3[ 10 ]; /* create array string3 */ 13 char string4[] = "Good Bye"; /* create a pointer to a string */ 14 15 copy1( string1, string2 ); 16 printf( "string1 = %s\n", string1 ); 17 18 copy2( string3, string4 ); 19 printf( "string3 = %s\n", string3 ); 20 21 return 0; /* indicates successful termination */ 22 23 } /* end main */ 24 Outline fig07_21.c (Part 1 of 2)

Outline Dizi sonlanma karakteri (\0) Eşitlik kullanarak char * s1[], * s2[]; for ( i = 0; (s1[i]=s2[i])!= \0 ; i++ ) { printf( "b[ %d ] = %d\n", i, s[ i ] ); } /* end for */ Pointer eşitliği üzerinden char * s1[], * s2[]; for ( i = 0; (*s1=*s2)!= \0 ; *s1++,*.s2++) { printf( "b[ %d ] = %d\n", i, s[ i ] ); } /* end for */

Fonksiyonlardan Dizi döndürme C de fonksiyon kendi içindeki diziyi doğrudan döndüremez. static kullanımı malloc kullanarak diziyi hafızada saklama Dizi referansı göndererek tekrar geri alma

Fonksiyonlardan Dizi döndürme (Diziyi göndererek tekrar geri alma) #include<stdio.h> /* Kendisine verilen iki diziyi birlestirip sonuclari ucuncu bir diziye atar */ int *dizileri_birlestir( int [], int, int [], int, int []); int main( void ) { // liste_1, 5 elemanli bir dizidir. int liste_1[5] = { 6, 7, 8, 9, 10 }; // liste_2, 7 elemanli bir dizidir. int liste_2[7] = {13, 7, 12, 9, 7, 1, 14 }; // sonuclarin toplanacagi toplam_sonuc dizisi int toplam_sonuc[13]; // sonucun dondurulmesi icin pointer tanimliyoruz int *ptr; int i; // fonksiyonu calistiriyoruz. ptr = dizileri_birlestir( liste_1, 5, liste_2, 7, toplam_sonuc ); // pointer uzerinden sonuclari yazdiriyoruz. for( i = 0; i < 12; i++ ) printf("%d ", *(ptr+i) ); printf("\n"); } return 0; http://www.cagataycebi.com/programming/c_programming/c_programming_10.html

Fonksiyonlardan Dizi döndürme (Diziyi göndererek tekrar geri alma-devam) int *dizileri_birlestir( int dizi_1[], int boyut_1, int dizi_2[], int boyut_2, int sonuc[] ) { int i, k; // Birinci dizinin degerleri ataniyor. for( i = 0; i < boyut_1; i++ ) sonuc[i] = dizi_1[i]; // Ikinci dizinin degerleri ataniyor. for( k = 0; k < boyut_2; i++, k++ ) { sonuc[i] = dizi_2[k]; } } // Geriye sonuc dizisi gonderiliyor. return sonuc;

Göstericilerin Dizileri Diziler pointer içerebilir. Örnek metin dizisi: char *suit[ 4 ] = { "Hearts", "Diamonds", "Clubs", "Spades" }; Strings ilk karakterleri gösteren pointer lerdir. char * suit in her elemanı char bir göstericidir manasındadır. String gerçekte suit içinde saklanmaz, sadece string pointer lar burada saklanır. suit[0] H e a r t s \0 suit[1] D i a m o n d s \0 suit[2] C l u b s \0 suit[3] S p a d e s \0 suit dizisi sabit uzunlukludur. Ancak stringler herhangi bir uzunlukta olabilir.

Gösterici Dizi Örnek Bir gösterici dizisindeki stringlerin uzunluğunu ikinci bir diziye aktarınız.

Gösterici Türünde Fonksiyonlar Bir fonksiyon tanımlanırken, parametreleri pointer olabileceği gibi, tipi de pointer olabilir. Bu, o fonksiyonun kendisini çağırana bir adres göndereceği anlamına gelir. Bu tür uygulamalar özellikle string uygulamalarında sık kullanılır.

Gösterici Türünde Fonksiyonlar Örnek: İki sayının toplamını bulan bir pointer türünde fonksiyon tasarlayınız.

Örnek Çözüm #include <stdio.h> int *topla(int,int); main(){ int a,b; int *p; a = 2; b = 4; p = topla(a,b); printf("toplam : %d (adresi %p)\n",*p,p); } int *topla(int x,int y) { int *ptr,toplam; toplam = x+y; ptr = &toplam; return ptr; }

Fonksiyon türünde göstericiler Fonksiyon tanımı void f(int); Fonksiyon türünde gösterici tanımı void (*pf1)(int) = &f; Fonksiyon türünde gösterici ile fonksiyon çağrılması int x = p(7)

Fonksiyon türünde göstericiler * Fonksiyon gösterici kullanımı Function un adresini içerir Dizinin ilk elemanının dizi adresi içermesine benzerdir. Fonksiyon ismi fonksiyonu tanımlayan kodun başlangıç adresini gösterir. Function pointer ler: Fonksiyonlara geçebilirler Dizilerde saklanabilir. Diğer fonksiyon göstericilere atanabilirler.

Fonksiyon Türünde Göstericiler Bütünleşik Örnek int f(int n) { } printf("değer %d",) return n*n; int main() { } int (*p)(int) = f; int x = p(7);

Kaynaklar https://www.youtube.com/watch?v=ynytggunele https://www.youtube.com/watch?v=cpjvucvac3g

Sorular