Pointer

Posted At: 04 Jul 2020 09:39:00

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

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");
}

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 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 );
}

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.

Ilustrasi Memori Larik

Ilustrasi Memori Larik

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
    }
}

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]);
    }
}
Yulrio Brianorman
Blogger, pemiliki Onestring Lab, menulis artikel terkait teknologi informasi dan pendidikan. Web Developer, berpengalaman lebih dari 20 tahun mengembangkan berbagai aplikasi dan sistem informasi. Kerjasama : kontak saya.