Amaç-C İşaretçileri
Objective-C'deki işaretçiler öğrenmesi kolay ve eğlencelidir. Bazı Objective-C programlama görevleri işaretçilerle daha kolay gerçekleştirilir ve dinamik bellek ayırma gibi diğer görevler işaretçiler kullanılmadan gerçekleştirilemez. Bu nedenle, mükemmel bir Objective-C programcısı olmak için işaretçileri öğrenmek gerekli hale geliyor. Bunları basit ve kolay adımlarla öğrenmeye başlayalım.
Bildiğiniz gibi, her değişken bir bellek konumudur ve her bellek konumunun, bellekteki bir adresi belirten ve işareti (&) operatörü kullanılarak erişilebilen tanımlanmış adresi vardır. Tanımlanan değişkenlerin adresini yazdıracak aşağıdaki örneği düşünün -
#import <Foundation/Foundation.h>
int main () {
int var1;
char var2[10];
NSLog(@"Address of var1 variable: %x\n", &var1 );
NSLog(@"Address of var2 variable: %x\n", &var2 );
return 0;
}
Yukarıdaki kod derlendiğinde ve çalıştırıldığında, sonucu aşağıdaki gibi üretir -
2013-09-13 03:18:45.727 demo[17552] Address of var1 variable: 1c0843fc
2013-09-13 03:18:45.728 demo[17552] Address of var2 variable: 1c0843f0
Yani, hafıza adresinin ne olduğunu ve ona nasıl erişileceğini anladınız, bu yüzden kavramın temeli bitti. Şimdi bir göstericinin ne olduğunu görelim.
İşaretçiler Nelerdir?
Bir pointerdeğeri başka bir değişkenin adresi, yani bellek yerinin doğrudan adresi olan bir değişkendir. Herhangi bir değişken veya sabit gibi, herhangi bir değişken adresini saklamak için kullanmadan önce bir işaretçi bildirmelisiniz. Bir işaretçi değişken bildiriminin genel şekli -
type *var-name;
Buraya, typeişaretçinin temel türüdür; geçerli bir Objective-C veri türü olmalı vevar-nameişaretçi değişkeninin adıdır. İşaretçi bildirmek için kullandığınız yıldız işareti *, çarpma için kullandığınız yıldız işaretiyle aynıdır. Bununla birlikte, bu ifadede yıldız işareti, bir değişkeni işaretçi olarak belirlemek için kullanılmaktadır. Aşağıda geçerli işaretçi bildirimi verilmiştir -
int *ip; /* pointer to an integer */
double *dp; /* pointer to a double */
float *fp; /* pointer to a float */
char *ch /* pointer to a character */
Tam sayı, kayan nokta, karakter veya başka türlü tüm işaretçilerin değerinin gerçek veri türü aynıdır, bir bellek adresini temsil eden uzun bir onaltılık sayı. Farklı veri türlerinin işaretçileri arasındaki tek fark, işaretçinin işaret ettiği değişken veya sabitin veri türüdür.
İşaretçiler nasıl kullanılır?
Çok sık işaretçiler yardımı ile yapacağımız birkaç önemli işlem var. (a) bir işaretçi değişkeni tanımlıyoruz, (b) bir değişkenin adresini bir işaretçiye atayın ve (c)son olarak, işaretçi değişkeninde bulunan adresteki değere erişin. Bu, tekli operatör kullanılarak yapılır*işleneni tarafından belirtilen adreste bulunan değişkenin değerini döndürür. Aşağıdaki örnek bu işlemlerden yararlanmaktadır -
#import <Foundation/Foundation.h>
int main () {
int var = 20; /* actual variable declaration */
int *ip; /* pointer variable declaration */
ip = &var; /* store address of var in pointer variable*/
NSLog(@"Address of var variable: %x\n", &var );
/* address stored in pointer variable */
NSLog(@"Address stored in ip variable: %x\n", ip );
/* access the value using the pointer */
NSLog(@"Value of *ip variable: %d\n", *ip );
return 0;
}
Yukarıdaki kod derlendiğinde ve çalıştırıldığında, sonucu aşağıdaki gibi üretir -
2013-09-13 03:20:21.873 demo[24179] Address of var variable: 337ed41c
2013-09-13 03:20:21.873 demo[24179] Address stored in ip variable: 337ed41c
2013-09-13 03:20:21.874 demo[24179] Value of *ip variable: 20
Objective-C'de NULL İşaretçiler
Atanacak tam adresiniz yoksa bir işaretçi değişkenine bir NULL değeri atamak her zaman iyi bir uygulamadır. Bu, değişken bildirimi sırasında yapılır. NULL atanmış bir işaretçi,null Işaretçi.
NULL işaretçisi, birkaç standart kütüphanede tanımlanan sıfır değerine sahip bir sabittir. Aşağıdaki programı düşünün -
#import <Foundation/Foundation.h>
int main () {
int *ptr = NULL;
NSLog(@"The value of ptr is : %x\n", ptr );
return 0;
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
2013-09-13 03:21:19.447 demo[28027] The value of ptr is : 0
Çoğu işletim sisteminde, programların 0 adresindeki belleğe erişmesine izin verilmez, çünkü bu bellek işletim sistemi tarafından ayrılmıştır. Bununla birlikte, hafıza adresi 0'ın özel bir anlamı vardır; işaretçinin erişilebilir bir bellek konumuna işaret etmesinin amaçlanmadığını belirtir. Ancak geleneksel olarak, eğer bir işaretçi boş (sıfır) değeri içeriyorsa, hiçbir şeyi göstermediği varsayılır.
Boş gösterici olup olmadığını kontrol etmek için, aşağıdaki gibi bir if ifadesi kullanabilirsiniz -
if(ptr) /* succeeds if p is not null */
if(!ptr) /* succeeds if p is null */
Ayrıntılı Amaç-C İşaretçileri
İşaretçilerin pek çok ama kolay konsepti vardır ve bunlar Objective-C programlaması için çok önemlidir. Bir Objective-C programcısı için açık olması gereken birkaç önemli işaretçi kavramı vardır:
Sr.No. | Konsept ve Açıklama |
---|---|
1 | Objective-C - İşaretçi aritmetiği İşaretçilerde kullanılabilen dört aritmetik operatör vardır: ++, -, +, - |
2 | Objective-C - İşaretçiler dizisi Bir dizi işaretçi tutacak diziler tanımlayabilirsiniz. |
3 | Objective-C - İşaretçiye işaretçi Objective-C, bir işaretçi üzerinde bir işaretçiye sahip olmanızı sağlar. |
4 | Hedef-C'deki işlevlere işaretçiler aktarma Bir bağımsız değişkeni başvuru veya adrese göre iletmek, iletilen bağımsız değişkenin çağrılan işlev tarafından çağrılan işlevde değiştirilmesini sağlar. |
5 | Objective-C'deki fonksiyonlardan dönüş işaretçisi Objective-C, bir fonksiyonun yerel değişkene, statik değişkene ve dinamik olarak ayrılmış belleğe bir işaretçi döndürmesine izin verir. |