Anda di halaman 1dari 12

BAB VI

PERCOBAAN 5
POINTER

6.1 Tujuan
1. Mengenal dan mengetahui penggunaan pointer dalam listing program.
2. Membuat program sederhana dengan menerapkan konsep pointer.

6.2 Dasar Teori


6.2.1 Operasi Pada Pointer
Pointer merupakan sebuah variabel yang berisi alamat dari variabel lain.
Suatu pointer dimaksudkan untuk menunjukan ke suatu alamat memori sehingga
alamat dari suatu variabel dapat diketahui dengan mudah. Arti pointer dalam
bahasa sehari-hari adalah petunjuk atau bisa di bilang penentu atau pointer secara
sederhana bisa diartikan sebagai tipe data yang nilainya mengarah pada nilai yang
terdapat pada sebuah area memori (alamat memori).
Bentuk umum : tipe_data *nama_pointer;
Pointer terdiri dari 2 operasi :
A. Operasi penugasan
Suatu pointer sama halnya seperti variabel yang lain juga bisa mengalami
suatu operasi penugasan. Nilai dari suatu variabel bisa disalin ke pointer variabel
yang lainnya.
B. Operasi aritmatika
Suatu variabel pointer dapat melakukan operasi aritmatika hanya jika
nilainya integer saja. Operasi yang bisa dilakukan adalah operasi penambahan dan
pengurangan saja.

6.2.2 Pointer pada Array


Array adalah kumpulan dari nilai-nilai data bertipe sama dalam urutan
tertentu yang menggunakan sebuah nama yang sama. Sementara bila array di
pointer maka dapat menampilkan alamat dari array tersebut.

68
69

6.2.3 Pointer pada Struct


Struct atau record adalah kumpulan data yang memiliki tipe data yang
berbeda. Secara pendeklarasian, struct sangat berbeda dengan array yang hanya
memiliki satu buah tipe data untuk setiap kumpulannya. Struct digunakan apabila
data yang ingin dikelompokkan memiliki tipe data yang berbeda.
Pada struct dapat dibuat suatu tipe yang kita buat sendiri .dikarenakan
pointer dapat bertipe apa saja maka pointer dapat digunakan pada struct.

6.2.4 Pointer pada Fungsi


Pada bagian ini akan dibahas 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.
70

6.3 Pembahasan
6.3.1 Operasi Pada Pointer
A. Operasi Penugasan
 Program 1
Pada percobaan program 1, source code yang digunakan adalah sebagai
berikut :
#include <stdio.h>

int main (){


int i; //mendeklarasikan i
int *ix; //mendeklarasikan *ix
i=5; //mengisi i dengan nilai 5 di alamat variable i
ix=&i; //mendeklarasikan nilai ix

printf ("Alamat dari i adalah %p\n", ix); /*menampilkan


alamat ix */
printf ("Nilai i adalah %d\n", i); //menampilkan nilai i
printf ("Nilai dari pointer ix adalah %d\n", *ix);
//menampilkan pointer ix
*ix= 100; //nilai ix baru
printf ("Nilai i sekarang adalah %d\n",i); /*menampilkan
nilai i sekarang */
printf ("Alamat dari i adalah %p\n",&i); /*menampilkan
alamat i yang baru */

return 0;

dan hasil compile dari source code di atas dapat dilihat pada Gambar 6.1

Gambar 6.1 Hasil Output Program 1


71

Pada Gambar 6.1 menampilkan hasil output program yang menunjukkan


bahwa nilai variabel i adalah 5 dan alamat dari variabel i adalah
000000000022FE44. Kemudian sesuai dengan yang ada pada source code, nilai i
diubah dari 5 menjadi 100 karena kita sudah mendefinisikan pointer ix di alamat i
dan kemudian nilai i tersebut ditampilkan. Setelah nilai variabel i diganti dari 5
menjadi 100, ternyata alamat dari variabel i masih tetap dan tidak berubah, yaitu
000000000022FE44. Sourcecode dan output dari program tersebut telah sesuai.

 Program 2
Pada percobaan program 2, source code yang digunakan adalah sebagai
berikut :

#include <stdio.h>

int main () {
int a=20, b=40,n;//Mendeklarasikan n,nilai a dan nilai
b sebagai integer
int *x, *y;//Mendeklarasikan *x dan *y sebagai integer
x = &a;//Mendeklarasikan x=&a
y = &b;//Mendeklarasikan x=&b

printf ("nilai yang ditunjuk x = %d di alamat %x\n",


*x, x); /*menampilkan alamat nilai x dan alamat x */

printf ("nilai yang ditunjuk y = %d di alamat %x\n\n", *y,


y); /*menampilkan alamat nilai y dan alamat y */

n = *x;
*x = *y;
*y = n;//Menukar nilai x dan y

printf ("nilai yang ditunjuk p sekarang = %d di alamat


%x\n", *x, x);
/*menampilkan alamat nilai x yangtelah diubah dan alamat x
*/
printf ("nilai yang ditunjuk q sekarang = %d di alamat
%x\n\n", *y, y); /*menampilkan alamat nilai q yang
telah diubah dan alamat y */

return 0;
}
72

dan hasil compile dari source code di atas dapat dilihat pada Gambar 6.2

Gambar 6.2 Hasil Output Progam 2

Gambar 6.2 menampilkan output dari program 2 dimana pada output


program tersebut terdapat nilai dan alamat dari 2 variabel yaitu x dan y
yang ditampilkan oleh program tersebut. Pada awalnya nilai x adalah 20
memiliki alamat 22fe38 dan nilai y adalah 40 dengan alamat 22fe34.
Kemudian program memproses nilai x dan nilai y ditukar, sehingga pada
keadaan berikutnya nilai x adalah 40 memiliki alamat 22fe38 dan nilai y
adalah 20 memiliki alamat 22fe34, sehingga pada saat persamaan ‘*x=*y’
dan ‘*y=n’ berlaku, alamat tetap sama.

A. Operasi Aritmatika
Pada percobaan operasi aritmatika, source code yang digunakan adalah
sebagai berikut :

#include <stdio.h>
int main () {
float nilai [5], *x; /*mendeklarasikan nilai dan x*/
nilai[0] = 235;//mendeklarasikan nilai o
nilai[1] = 57;//mendeklarasikan nilai 1
nilai[2] = 27;//mendeklarasikan nilai 2
nilai[3] = 378;//mendeklarasikan nilai 3
nilai[4] = 119;//mendeklarasikan nilai 4
x = &nilai[0];//mendeklarasikan nilai dari x
printf ("nilai %f ada di alamat %p\n", *x, x);
//menampilkan nilai ke 1
printf ("nilai %f ada di alamat %p\n", *(x+1), x+1);
//menampilkan nilai ke 2
73

printf ("nilai %f ada di alamat %p\n", *(x+2), x+2);


//menampilkan nilai ke 3
printf ("nilai %f ada di alamat %p\n", *(x+3), x+3);
//menampilkan nilai ke 4
printf ("nilai %f ada di alamat %p\n", *(x+4), x+4);
//menampilkan nilai ke 5
return 0;
}

dan hasil compile dari source code di atas dapat dilihat pada Gambar 6.3

Gambar 6.3 Hasil Output Program 3

Pada Gambar 6.3 menampilkan output program dimana terdapat nilai berbeda
dengan 5 alamat yang berbeda pula. Nilai pertama yaitu 235.000000 terdapat pada
alamat 000000000022FE30, nilai kedua yaitu 57.000000 terdapat pada alamat
000000000022FE34, nilai ketiga yaitu 27.000000 terdapat pada alamat
000000000022FE38, nilai keempat yaitu 378.000000 terdapat pada alamat
000000000022FE3C, dan nilai kelima yaitu 119.000000 terdapat pada alamat
000000000022FE44. Output program disebabkan oleh ‘x+1’ karena ‘x=nilai[0]’
maka ‘x+1’ adalah nilai[1], nilai variabel ketiga di indeks 2 yaitu 27.000000 yang
terletak pada alamat 000000000022FE38, yang penyebabnya ‘x+2’ yang berarti
nilai nya adalah nilai[2], nilai variabel ketiga di indeks 3 yaitu 378.000000 yang
terletak pada alamat 000000000022FE3C, yang penyebabnya ‘x+3’ yang berarti
nilai nya adalah nilai[3], nilai variabel ketiga di indeks 4 yaitu 119.000000 yang
terletak pada alamat 000000000022FE44, yang penyebabnya ‘x+4’ yang berarti
nilai nya adalah nilai[4]. Berdasarkan hasil output dari source code, 5 nilai ini
disimpan pada sebuah variabel array satu dimensi yaitu nilai[5] menunjukkan
74

bahwa pada setiap nilai yang disimpan pada array akan memiliki alamat yang
berbeda.

6.3.2 Pointer pada Array


Pada percobaan operasi pointer pada array, source code yang digunakan
adalah sebagai berikut :

#include <stdio.h>
int main (){
char nama[] = "Peter Griffin"; //mendeklarasikan nama
char *p; //mendeklarasikan *p
p=nama;//Menunjuk nama array secara langsung
while (*p!=NULL){ //memperoleh nilai *p
printf("%c",*p); //menampilkan nilai *p
p++;
}
printf("\n\n\n\n\n");
p=&nama[0]; /*Menunjuk nama array secara ekssplisit ke
elemen pertama */
while (*p!=NULL){ //memperoleh nilai *p
printf("%c",*p); //menampilkan nilai *p
p++;
}
printf("\n\n\n\n\n");
p=&nama[0]; /*Menunjuk nama array secara ekssplisit ke
elemen pertama */
while (*p!=NULL){ //memperoleh nilai *p
printf("%c",*p); //menampilkan nilai *p
p++;
}
printf("\n");
return 0;
}

dan hasil compile dari source code di atas dapat dilihat pada Gambar 6.4

Gambar 6.4 Output program dari pointer pada array


75

Pada Gambar 6.4 menampilkan output program yang berisi sebuah


tampilan dengan 3 tulisan “Peter Griffin”. Proses penulisan kata “Peter Griffin”
ini menggunakan array. Dimana dalam source code nya kata “Peter Griffin”
disimpan di array nama yang tipe datanya char. Di dalam source code,
pemanggilan 3 kata “Peter Griffin” yang ada dalam output program ada 2 cara
yaitu dengan menunjuk alamat awal array nama secara langsung dan menunjuk
secara eksplisit ke elemen pertama array nama. Walaupun dipanggil dengan dua
cara yang berbeda akan tetapi tetap dihasilkan kata “Peter Griffin” yang sama
seperti yang ditampilkan Gambar 6.4 karena keduanya memiliki fungsi yang sama
yaitu memanggil array nama hanya dengan cara yang berbeda
.
6.3.3 Pointer Pada Struct
Pada percobaan operasi pointer pada struct, source code yang digunakan
adalah sebagai berikut :

#include <stdio.h>

typedef struct{
int nim;//Mendeklarasikan nim sebagai integer
float ipk;//Mendeklarasikan ipk sebagai float
} Mahasiswa;
Mahasiswa m;
Mahasiswa *p=&m;//membuat data *p sama dengan data &m

int main(){
m.nim=20013;//Memasukkan nilai nim=20013
m.ipk=3.80;//Memasukkan nilai ipk= 3.80
printf("nim= %d\n",m.nim);//Menampilkan nim
printf("ipk= %f\n",m.ipk);//Menampilkan ipk

p->ipk =2.46;//Memasukkan nilai ipk=2.46 dengan cara pointer


p->nim= 20015;//Memasukkan nilai nim=20015 dengan cara
pointer
printf("Nim= %d\n",p->nim); //Menampilkan nim dengan cara
pointer
printf("ipk= %f\n",p->ipk); //Menampilkan ipk dengan cara
pointer
printf("Nim= %d\n",m.nim); //Menampilkan nim dengan cara
struct biasa
printf("ipk= %f\n",m.ipk); //Menampilkan ipk dengan cara
struct biasa
return 0;
}
76

dan hasil compile dari source code di atas dapat dilihat pada Gambar 6.5

Gambar 6.5 Hasil output program pointer pada struct.

Pada Gambar 6.5 menampilkan sebuah program dari source code yang
menampilkan data yaitu nim dan ipk yang masing-masing memiliki 2 nilai
berbeda. Dimana nim pertama adalah 20013 dan ipk pertama memiliki nilai 3.80,
proses pemasukkan nilai dari data ini menggunakan struct biasa.. Lalu data yang
berikutnya, nim kedua adalah 20015 dan ipk kedua memiliki nilai 2.46, proses
pemasukkan nilai yang kedua ini menggunakan struct pointer. Setelah itu akan
ditampilkan kembali data yang ketiga dimana data tersebut sama dengan data
kedua karena data ketiga mengacu pada nilai terakhir yang diisikan. Program ini
juga menggunakan struct yang memungkinkan data bertipe lebih dari satu, seperti
dalam program diatas menggunakan 2 tipe data yaitu integer dan float. dalam
progaram telah di deklarasikan *p=&m sehingga hasil output antara m.nim dan p-
> nim maupun m.ipk dan p->ipk sama karena alamat yang dituju sama.

6.3.2 Pointer Pada Fungsi


Pada percobaan operasi pointer pada fungsi source code yang digunakan
adalah sebagai berikut :

#include <stdio.h>

void ubah_nilai (int *n)//Membuat fungsi ubah_nilai dan


mendeklarasikan *n sebagai parameter bertipe integer
{
*n=*n*40;/*Membuat perintah yang dijalankan pada fungsi*/
}

main()
{
77

int a=10;//mendeklarasikan nilai a=5 sebagai integer


printf("Nilai A Awal = %d\n",a);//Menampilkan nilai A
awal
ubah_nilai (&a);//Memanggil fungsi ubah_nilai
printf("Nilai A Akhir = %d",a);//Menampilkan nilai A
akhir setelah melalui proses di dalam fungsi yang dipanggil
}

dan hasil compile dari source code di atas dapat dilihat pada Gambar 6.6

Gambar 6.6 Hasil output program pointer pada fungsi.

Pada Gambar 6.6 menampilkan sebuah program yang berisi sebuah nilai
awal yaitu 10. Setelah itu, di dalam fungsi main di panggil fungsi ubah_nilai
dimana di dalam fungsi tersebut terdapat operasi pointer yang berupa operasi
aritmatika Alamat a diisikan sebagai parameter fungsi ubah nilai di fungsi main
sehingga nilai dari alamat itu dioperasikan di fungsi ubah nilai yaitu “*n=*n*40;”.
Operasi tersebut memiliki arti nilai A akhir diperoleh dari nilai A awal yaitu 10
dikali dengan dengan 40 sehingga ketika variable a ditampilkan pada insturksi
selanjutnya ,nilai akhir adalah 400 Seperti yang tertampil pada. Gambar 6.6
,sehingga source code dan output program sesuai.
78

6.4 Kesimpulan
1. Pada percobaan menggunakan operasi penugasan hasil output program
tersebut menunjukkan bahwa nilai variabel i adalah 5 dan alamat dari variabel
i adalah 000000000022FE44. Kemudian nilai i diubah dari 5 menjadi 100
karena kita sudah mendefinisikan pointer ix di alamat i dan kemudian nilai i
tersebut ditampilkan. Setelah nilai variabel i diganti dari 5 menjadi 100,
ternyata alamat dari variabel i masih tetap dan tidak berubah, yaitu
000000000022FE44.
2. Pada percobaan menggunakan operasi penugasan yang kedua output dari
program tersebut terdapat nilai dan alamat dari 2 variabel yaitu x dan y yang
ditampilkan oleh program tersebut. Pada awalnya nilai x adalah 20 memiliki
alamat 22fe38 dan nilai y adalah 40 dengan alamat 22fe34. Kemudian
program memproses nilai x dan nilai y ditukar, sehingga pada keadaan
berikutnya nilai x adalah 40, namun memiliki alamat tetap yaitu 22fe38,
sementara nilai y adalah 20 dan memiliki alamat 22fe34.
3. Pada percobaan yang menggunakan operasi aritmatika output program
menunjukkan bahwa terdapat nilai berbeda dengan 5 alamat yang berbeda
pula. Nilai pertama yaitu 235.000000 terdapat pada alamat
000000000022FE30, nilai kedua yaitu 57.000000 terdapat pada alamat
000000000022FE34, nilai ketiga yaitu 27.000000 terdapat pada alamat
000000000022FE38, nilai keempat yaitu 378.000000 terdapat pada alamat
000000000022FE3C, dan nilai kelima yaitu 119.000000 terdapat pada alamat
000000000022FE44.
4. Pada percobaan yang menggunakan pointer pada array output program
tersebut berisi sebuah tampilan dengan 3 tulisan “Peter Griffin”. Proses
penulisan kata “Peter Griffin” ini menggunakan array. Dimana dalam source
code nya kata “Peter Griffin” disimpan di array nama yang tipe datanya char.
Di dalam source code, pemanggilan dua kata “Peter Griffin” yang ada dalam
output program ada 2 cara yaitu dengan menunjuk alamat awal array nama
secara langsung dan menunjuk secara eksplisit ke elemen pertama array
nama.
79

5. Pada percobaan yang menggunakan pointer pada struct awalnya


menampilkan data yaitu nim dan ipk yang masing-masing memiliki 2 nilai
berbeda. Dimana nim pertama adalah 20013 dan ipk pertama memiliki nilai
3.80, proses pemasukkan nilai dari data ini menggunakan struct biasa.. Lalu,
nim kedua adalah 20015 dan ipk kedua memiliki nilai 2.46, proses
pemasukkan nilai yang kedua ini menggunakan struct pointer. Setelah itu
akan ditampilkan kembali data yang ketiga dimana data tersebut sama dengan
data kedua karena data ketiga mengacu pada nilai terakhir yang diisikan.
6. Pada percobaan yang menggunakan pointer pada fungsi program tersebut
berisi sebuah nilai awal yaitu 10. Setelah itu, di dalam fungsi main di panggil
fungsi ubah_nilai dimana di dalam fungsi tersebut terdapat operasi pointer
yang berupa operasi aritmatika Alamat a diisikan sebagai parameter fungsi
ubah nilai di fungsi main sehingga nilai dari alamat itu dioperasikan di fungsi
ubah nilai yaitu “*n=*n*40;”. Operasi tersebut memiliki arti nilai A akhir
diperoleh dari nilai A awal yaitu 10 dikali dengan dengan 40 sehingga ketika
variable a ditampilkan pada instuksi selanjutnya ,nilai akhir adalah 400.

Anda mungkin juga menyukai