Pointer TEE 2103 Algoritma dan Pemrograman Dosen: Abdillah, MIT Hp: 0853 6581 8665 Email: abdill01@gmail.com Website: www.abdill01.wordpress.com
Tujuan Memahami penggunaan pointer dalam runtunan komputasi program C.
Pointer dan Alamat Dalam C, pointer adalah variabel yang mengandung alamat dari variabel lain. Jika variabel c sebuah char dan p sebuah pointer yang menunjuk pada c, maka situasi ini dapat ditulis dengan: p = &c; Statemen di atas menugaskan alamat variabel c pada pointer p.
Pointer dan Alamat Operator & hanya dapat dioperasikan pada objek dalam memori, yakni variabel dan elemen array. Operator & tidak bisa dioperasikan pada ekspresi, konstanta atau variabel register. Operator * adalah operator dereferencing atau indirection. Jika dioperasikan pada pointer, maka operator ini mengakses objek yang ditunjuk oleh pointer.
Pointer dan Alamat Misalkan ip adalah pointer ke int, statement berikut menjelaskan cara deklarasi pointer dan penggunaan operator & dan *. int x = 1, y = 2, z[10]; int *ip; /* deklarasi pointer ip */ ip = &x; /* ip sekarang menunjuk ke x */ y = *ip; /* y sekarang bernilai 1 */ *ip = 0; /* x sekarang bernilai 0 */ ip = &z[0]; /* ip sekarang menunjuk ke z[0] */
Pointer dan Argumen Fungsi #include <stdio.h> void tukar(int x, int y); main () { int a=3, b=5; tukar(a, b); printf(“a = %d dan b = %d”, a, b); } void tukar(int x, int y) int temp; temp = x; x = y; y = temp; printf(“x = %d dan y = %d”, x, y); Pointer dan Argumen Fungsi
Pointer dan Argumen Fungsi Telah dijelaskan pada kuliah bab Fungsi bahwa dalam C setiap argumen fungsi dilewatkan dengan nilainya (call by value), sehingga fungsi yang dipanggil tidak dapat langsung mengubah variabel dalam fungsi yang memanggil. Dalam contoh di atas, fungsi tukar tidak dapat langsung menukar variabel a dan b dalam fungsi main. Fungsi tukar hanya dapat menukar nilai x dan y.
Pointer dan Argumen Fungsi Namun dengan pointer sebagai argumen fungsi, fungsi tukar secara tidak langsung dapat mengakses variabel a dan b dalam fungsi main. Hal ini memungkinkan fungsi tukar menukar nilai a dan b.
Pointer dan Argumen Fungsi #include <stdio.h> void tukar(int *x, int *y); main () { int a=3, b=5; tukar(&a, &b); printf(“a = %d dan b = %d”, a, b); } void tukar(int *x, int *y) int temp; temp = *x; *x = *y; *y = temp; Pointer dan Argumen Fungsi
Pointer dan Array Dalam C ada hubungan yang erat antara pointer dan array. Semua operasi yang bisa dilakukan array dapat pula dilakukan pointer. Deklarasi array berikut: mendefinisikan sebuah array berukuran 10, yakni sebuah blok terdiri atas 10 objek yang berurutan dengan nama a[0], a[1], ... a[9]. int a[10];
Pointer dan Array Jika pa adalah pointer ke variabel integer dideklarasikan dengan maka penugasan berikut membuat pa menunjuk ke elemen nol dari a. Sekarang penugasan akan menyalin isi dari a[0] ke x. Dan *(pa+1) akan menunjuk pada isi a[1]. int *pa; pa = &a[0]; x = *pa;
Aritmetika Alamat Jika p adalah pointer ke sebuah elemen array, maka p++ akan menaikkan p untuk menunjuk ke elemen berikutnya dan p += i menaikkan p untuk menunjuk elemen ke-i setelah elemen yang ditunjuknya sekarang. Operasi pointer yang boleh adalah penugasan pointer dengan tipe yang sama, menambah atau mengurangi pointer dengan integer, membandingkan dua pointer dan membandingkan pointer dengan nol.
Pointer Karakter Konstanta string “I am a string” adalah sebuah array karakter yang diakhiri dengan karakter null ‘\0’sehingga array lebih panjang 1 karakter daripada jumlah karakter di antara tanda petik ganda. Jika pmessage dideklarasikan sbg maka statement menugaskan pada pmessage pointer ke array karakter. char *pmessage; char *pmessage;
Pointer Karakter Ada perbedaan penting antara dua definisi berikut: Statement pertama adalah sebuah array, sedangkan statement kedua adalah sebuah pointer. char amessage[] = "now is the time“; char *pmessage = "now is the time“;