Posted At: 04 Jul 2020 09:39:00
Pointer
Deklarasi
int *b
Alamat memory pointer (address of)
&b
Isi pointer
b
Isi dari isi pointer (value pointed by)
*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");
}
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 Fungsi \n");
printf ("y=%d\n",y);
printf ("z=%d\n",z);
hasil = hitung (y ,&z);
printf (" Sebelum Jalankan Fungsi \n");
printf ("y=%d\n",y);
printf ("z=%d\n",z);
printf (" hasil =%d\n",hasil );
}
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.
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 ;
// Boleh 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 =%d\n\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
}
}
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]);
}
}