Pointer Dalam Bahasa C
Pengertian Pointer
- Pointer adalah suatu variabel yang menunjuk ke alamat memory variabel yang lainnya.
- Suatu pointer bukan berisi dengan suatu nilai data seperti halnya pada variabel biasa, variabel pointer berisi dengan suatu alamat.
- Untuk mendeklarasikan variabel pointer kita menggunakan tanda asterik / bintang (*) didepan variabel yang di deklarasikan pada tipe data tertentu.
- Tanda ini juga dapat dipakai untuk mengakses nilai dari variabel yang telah ditunjuk.
- Untuk mendapatkan alamat dari variabel pointer kita menggunakan tanda &
Deklarasi & Isi
Deklarasi variabel pointer seperti halnya deklarasi variabel lainnya hanya ditambahkan tanda * pada depan nama variabel.
int *b
Untuk mendapatkan alamat memori pointer (address of) maka perintah yang digunakan adalah menambahkan tanda & didepan variabel
&b
Untuk mendapatan Isi atau nilai dari variabel pointer maka perintah yang digunakan cukup nama variabelnya saja.
b
Untuk mendapatkan isi atau nilai dari alamat yang terdapat pada isi pointer (value pointed by) maka perintah yang digunakan adalah menambahkan tanda * didepan variabel
*b
Contoh program dengan pointer
#include <stdio.h>
main(){
int *ptr;
int k;
k=7;
printf("Isi variabel k = %d",k);
printf("\nAlamat variabel k = %d",&k);
printf("\nAlamat variabel *ptr = %d",&ptr);
printf("\nIsi variabel *ptr = %d",ptr);
ptr=&k;
printf("\nAlamat variabel *ptr = %d",&ptr);
printf("\nIsi variabel *ptr = %d",ptr);
printf("\nIsi dari alamat %d = %d",ptr,*ptr);
printf("\n");
}
Fungsi dan Pointer
Pada bagian ini akan dibahasa mengenai penggunaan pointer pada parameter fungsi. Parameter pass by reference adalah pemrosesan parameter di dalam sebuah fungsi di mana yang dimasukkan didalam prosedur adalah tempat atau alamat dari variabel yang menjadi parameter sehingga dapat terjadi perubahan nilai variabel yang menjadi parameter.
Contoh program fungsi dengan parameter pass by reference
#include <stdio.h> int hitung(int a, int *b){ *b = 15; return a + *b; } main(){ int y,z,hasil; y=10; z=50; printf("Sebelum Jalankan Fungsin"); printf("y=%d\n",y); printf("z=%d\n",z); hasil=hitung(y,&z); printf("Sebelum Jalankan Fungsin"); printf("y=%d\n",y); printf("z=%d\n",z); printf("hasil=%d\n",hasil); }
Larik dan Pointer
Dalam pemrograman C, definisi larik dituliskan: type_name array_name [number_of_array], misal larik A bertipe integer dengan 10 anggota didefinisikan dengan int A[10].Apa maksudnya? Dengan penulisan itu, maka diperintahkan kepada kompiler untuk menyediakan alamat memori sebesar 10 * sizeof(int). Bila ukuran int adalah 4 byte, maka compiler akan mengalokasikan sebesar 10 * 4 byte = 40 byte memori untuk A. Maka penggambarannya dapat diilustrasikan sebagai berikut.
Array | Alamat Memori |
---|---|
A[0] | 0xDDDD0004 |
A[1] | 0xDDDD0008 |
A[2] | 0xDDDD000C |
… | … |
A[7] | 0xDDDD0020 |
A[8] | 0xDDDD0024 |
A[9] | 0xDDDD0028 |
Seperti pada pembahasan pointer dengan variabel, pointer pada larik sesungguhnya juga diperintahkan pointer agar menunjuk ke alamat yang telah dialokasikan oleh larik tersebut. Pada contoh diatas, bila didefinisikan suatu pointer
int *P:
kemudian kita tunjuk ke alamat larik A
P = &A[0];
maka alamat P akan menunjuk ke alamat 0xDDDD0004
Program berikut ini menampilkan alamat memory dan mengakses larik menggunakan pointer. #include <stdio.h> main(){ int my_array[6] = {1,23,17,4,-5,100}; int *p_array; // Dapat juga ditulis p_array = my_array; p_array = &my_array[0]; printf("Alamat dari p_array=%d\n",&p_array); printf("Isi dari isi p_array=%dn\n",*p_array); p_array++; printf("Isi dari p_array=%d\n",p_array); printf("Isi dari isi p_array=%d\n",*p_array); }
Program berikut ini menampilkan larik dengan menggunakan pointer.
#include <stdio.h> main(){ int *pArray, Array[10],i; for(i=0;i<10;i++){ Array[i] = i+10; //pengisian array } // tunjuk pArray ke alamat awal array pArray = &Array[0]; // bisa dituliskan pArray=Array for(i=0;i<10;i++){ printf("Alamat pointer= %d. Isi dari alamat %d = %d\n",&pArray,pArray,*pArray++); //cetak pArray } }
Latihan Pointer
Program berikut ini memasukan nilai dari keyboard dan perubahan nilai dari pointer.
#include <stdio.h> main(){ int *ptr,nilai; //memberikan alamat memori nilai ke variabel *ptr ptr=&nilai; printf("Isi Nilai = "); scanf("%d",&nilai); printf("Isi dari isi alamat ptr = %d\n\n",*ptr); printf("Isi Nilai = "); scanf("%d",&nilai); printf("Isi dari isi alamat ptr = %d\n\n",*ptr); printf("Isi Nilai = "); scanf("%d",&nilai); printf("Isi dari isi alamat ptr = %d\n\n",*ptr); }
Program berikut ini mengisi dan menampilkan larik menggunakan pointer
#include <stdio.h> main(){ int *pArray, Array[10]; int i; // tunjuk pArray ke alamat awal array pArray = &Array[0]; // bisa dituliskan pArray=Array for(i=0;i<10;i++){ *pArray = i+100; //pengisian array melalui pArray pArray++; } pArray = &Array[0]; for(i=0;i<10;i++){ printf("pArray = %d\n",*pArray++); //cetak pArray } }
Program berikut ini mengisi larik dari keyboard dengan pointer dan menampilkannya.
#include <stdio.h> main(){ int *ptr,i,nilai,arrayA[3]; ptr=arrayA; for(i=0;i<3;i++){ printf("Isi nilai[%d] = ",i); scanf("%d",&nilai); *ptr=nilai; ptr++; } for(i=0;i<3;i++){ printf("Isi nilai[%d] = %d",i,arrayA[i]); printf("\n"); } printf("\n"); }
Program berikut ini memanipulasi larik dengan fungsi menggunakan pointer.
#include <stdio.h> void rubah(int *b){ printf("n%d",b); *--b = 7; } main(){ int my_array[6] = {1,23,17,4,-5,100}; int i; printf("Menampilkan Data Array\n"); //Menggunakan Looping for(i=0;i<6;i++){ printf("Data ke-%d = %d\n",i+1,my_array[i]); } rubah(&my_array[3]); printf("Menampilkan Data Array Setelah di rubah\n"); for(i=0;i<6;i++){ printf("Data ke-%d = %d\n",i+1,my_array[i]); } }
0 comments:
Post a Comment