Pointer Objective-C
Petunjuk di Objective-C mudah dan menyenangkan untuk dipelajari. Beberapa tugas pemrograman Objective-C dilakukan lebih mudah dengan pointer, dan tugas lain, seperti alokasi memori dinamis, tidak dapat dilakukan tanpa menggunakan pointer. Jadi penting untuk mempelajari pointer untuk menjadi programmer Objective-C yang sempurna. Mari mulai mempelajarinya dengan langkah-langkah sederhana dan mudah.
Seperti yang Anda ketahui, setiap variabel adalah lokasi memori dan setiap lokasi memori memiliki alamat yang ditentukan yang dapat diakses menggunakan operator ampersand (&), yang menunjukkan alamat dalam memori. Perhatikan contoh berikut, yang akan mencetak alamat dari variabel yang ditentukan -
#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;
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan sesuatu sebagai berikut -
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
Jadi, Anda mengerti apa itu alamat memori dan bagaimana mengaksesnya, jadi dasar konsepnya sudah berakhir. Sekarang mari kita lihat apa itu pointer.
Apa Itu Pointer?
SEBUAH pointeradalah variabel yang nilainya adalah alamat variabel lain, yaitu alamat langsung dari lokasi memori. Seperti variabel atau konstanta apa pun, Anda harus mendeklarasikan sebuah pointer sebelum Anda dapat menggunakannya untuk menyimpan alamat variabel apa pun. Bentuk umum dari deklarasi variabel pointer adalah -
type *var-name;
Sini, typeadalah tipe dasar pointer; itu harus tipe data Objective-C yang valid danvar-nameadalah nama variabel penunjuk. Tanda bintang * yang Anda gunakan untuk menyatakan penunjuk adalah tanda bintang yang sama dengan yang Anda gunakan untuk perkalian. Namun, dalam pernyataan ini tanda bintang digunakan untuk menunjukkan variabel sebagai penunjuk. Berikut adalah deklarasi penunjuk yang valid -
int *ip; /* pointer to an integer */
double *dp; /* pointer to a double */
float *fp; /* pointer to a float */
char *ch /* pointer to a character */
Tipe data aktual dari nilai semua pointer, apakah integer, float, karakter, atau sebaliknya, adalah sama, angka heksadesimal panjang yang mewakili alamat memori. Satu-satunya perbedaan antara pointer dari tipe data yang berbeda adalah tipe data dari variabel atau konstanta yang ditunjuk pointer.
Bagaimana cara menggunakan Pointer?
Ada beberapa operasi penting, yang akan kami lakukan dengan bantuan petunjuk sangat sering. (a) kami mendefinisikan variabel pointer, (b) menetapkan alamat variabel ke pointer, dan (c)terakhir akses nilai di alamat yang tersedia di variabel pointer. Ini dilakukan dengan menggunakan operator unary*yang mengembalikan nilai variabel yang terletak di alamat yang ditentukan oleh operannya. Contoh berikut memanfaatkan operasi ini -
#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;
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan sesuatu sebagai berikut -
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
Pointer NULL di Objective-C
Itu selalu merupakan praktik yang baik untuk menetapkan nilai NULL ke variabel pointer jika Anda tidak memiliki alamat yang tepat untuk ditetapkan. Ini dilakukan pada saat deklarasi variabel. Sebuah pointer yang diberi NULL disebut anull penunjuk.
Pointer NULL adalah konstanta dengan nilai nol yang ditentukan di beberapa pustaka standar. Pertimbangkan program berikut -
#import <Foundation/Foundation.h>
int main () {
int *ptr = NULL;
NSLog(@"The value of ptr is : %x\n", ptr );
return 0;
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
2013-09-13 03:21:19.447 demo[28027] The value of ptr is : 0
Di sebagian besar sistem operasi, program tidak diizinkan untuk mengakses memori di alamat 0 karena memori tersebut dicadangkan oleh sistem operasi. Bagaimanapun, alamat memori 0 memiliki arti khusus; itu menandakan bahwa penunjuk tidak dimaksudkan untuk menunjuk ke lokasi memori yang dapat diakses. Tetapi menurut kesepakatan, jika sebuah pointer berisi nilai null (nol), itu dianggap tidak menunjuk ke apa-apa.
Untuk memeriksa pointer null, Anda dapat menggunakan pernyataan if sebagai berikut -
if(ptr) /* succeeds if p is not null */
if(!ptr) /* succeeds if p is null */
Pointer Objective-C dalam Detail
Pointer memiliki banyak konsep tetapi mudah dan sangat penting untuk pemrograman Objective-C. Ada beberapa konsep pointer penting berikut, yang harus jelas bagi programmer Objective-C -
Sr.No. | Konsep & Deskripsi |
---|---|
1 | Objective-C - Aritmatika penunjuk Ada empat operator aritmatika yang dapat digunakan pada pointer: ++, -, +, - |
2 | Objective-C - Array pointer Anda dapat menentukan array untuk menampung sejumlah pointer. |
3 | Objective-C - Arahkan ke penunjuk Objective-C memungkinkan Anda untuk mengarahkan pointer ke pointer dan seterusnya. |
4 | Meneruskan pointer ke fungsi di Objective-C Meneruskan argumen dengan referensi atau dengan alamat keduanya memungkinkan argumen yang diteruskan diubah dalam fungsi pemanggil oleh fungsi yang dipanggil. |
5 | Kembalikan penunjuk dari fungsi di Objective-C Objective-C memungkinkan suatu fungsi untuk mengembalikan pointer ke variabel lokal, variabel statis, dan memori yang dialokasikan secara dinamis juga. |