18
18.1 Pengertian Pointer.
Dilihat dari fungsinya, pointer dapat diartikan sebagai suatu nilai yang menunjuk atau
menyatakan alamat suatu lokasi memori. Dilihat dari fisiknya, Pointer adalah sebuah
variabel yang berisi alamat suatu lokasi memori. Lokasi memori tersebut mungkin
diwakili oleh sebuah variabel yang mempunyai nama, atau mungkin juga lokasi bebas
dalam memori. Sedangkan pointer sendiri yang berupa sebuah nilai ditampung dalam
sebuah variabel yang disebut variabel pointer. Jadi variabel pointer berisi suatu nilai yang
menyatakan alamat suatu lokasi.
Untuk selanjutnya variebel pointer hanya disebut pointer.
Untuk memahami penggunaan pointer, lebih mudah bila dipelajari melalui contoh-
contoh yang diberikan pada SubBab 18.2 berikut ini .
Penjelasan:
(1) Instruksi : int A = 25; (2) Instruksi : int *P;
Mmenyiapkan variabel A ilustrasi 25 menyiapkan variabel P
dengan tipe int, dengan tipe ilustrasi
dan isinya dibuat = 25 A Pointer to integer
P
(biasa ditulis :“ int* “ )
H21E0 Isinya ada, tapi
Misal alamat variabel A tidak diketahui
adalah H21E0 ( H = Hexa)
C C++
int A=25; int A=25; 21E0
25
int *P; int *P;
P = &A; P = &A;
A P
printf(“%p”, P); cout << P;
21E0
Tercetak : 21E0 Tercetak : 21E0
yaitu alamat yaitu alamat Catatan : 21E0 adalah isi variabel
variabel A variabel A Pointer P yang
dinyatakan dengan nilai
Hexa-decimal.
Catatan : Alamat variabel A dapat juga dicetak dengan
instruksi :
printf(“%X”, &A); pada C,
atau cout << &A; pada C++.
Contoh-03. Mencetak isi Pointer P sebagai alamat variabel A dalam bentuk decimal.
C
Hexa : 2 1 E 0 Bila dikonversikan ke Decimal
int A=25;
int *P; 0 * 0 = 0
P = &A; Dicetak 14 * 16 = 224
printf(“%i”, P); dengan format 1 * 256 = 256
integer ( %i ) 2 * 4096 = 8192
Tercetak : 8672
yaitu isi variabel P (alamat variabel A) Nilai Decimal : Total : 8672
dicetak dalam bentuk decimal
404
Contoh-04. Mengisi variabel dengan nilai yang ditunjuk oleh sebuah Pointer.
C / C++ P
Contoh-05. Sebuah alamat dapat ditunjuk oleh lebih dari satu pointer.
Q
(1) int A = 25, B = 12; P
(2) int *P, *Q;
(3) P = &A;
(4) Q = P; 25 12
(5) printf(“%i\n”, *P);
A B
(6) printf(“%i\n”, *Q);
Pointer P dan Q
Tercetak : 25 keduanya menunjuk variabel A
25
Keduanya mencetak isi variabel A
405
Contoh-07. Mengisi variabel yang ditunjuk oleh sebuah Pointer.
P
int A, *P; (1)
P = &A; (2) 2)
*P = 25; (3)
printf(“%i”, A); (4) P A
Tercetak : 25
3)
Untuk program diatas, instruksi : *P = 25; 25
sama maksudnya dengan instruksi : A = 25;
A
Contoh-08. Sebuah pointer dapat menyimpan alamat Pointer lain.
Contoh-09. Sebuah pointer dapat menunjuk sebuah lokasi memory secara dinamis.
( secara dinamis maksudnya dapat dibuat dan dapat dihapus pada saat program
sedang berjalan )
C C++
int *P; int *P; 14FA 25
P = (int *)malloc(sizeof(int)); P = new int;
P
*P = 25; *P = 25;
printf(“%i”, *P ); cout << *P; H14FA
Pointer P,
Tercetak : 25 Tercetak : 25
menunjuk suatu
area dalam
malloc adalah instruksi untuk memory allocation memory (heap
memory). Area
P = (int *)malloc(sizeof(int)); pada Bahasa C tersebut tidak diberi
atau nama.
P = new int; pada Bahasa C++,
maksudnya menyiapkan suatu area bertipe int yang ditunjuk oleh Pointer P
Area tersebut tidak diberi nama, dan dapat dihapus dengan free()
pada C atau delete() pada C++
406
18.2.2 Pointer menunjuk alamat elemen array satu dimensi
Contoh-01. Pointer menunjuk alamat elemen array.
Nilai sebuah pointer dapat dikenai operasi arithmetic seperti ditambah atau dikurang.
407
Contoh-03. Memajukan atau memundurkan pointer dapat dilakukan sekaligus
dalam instruksi printf( ). Perhatikan contoh berikut ini.
0 1 2 3 4
4. Dengan : printf(“%i”, ++*P ); A 25 12 17 10 15
Tercetak : 18
P
Instruksi diatas sebenarnya dua Elemen yang ditunjuk oleh Pointer P, isinya
instruksi: ditambah 1 lebih dulu. Kemudian baru
++*P; dicetak.
printf(“%i”, *P); 0 1 2 3 4
yang digabung jadi satu. A 25 12 18 10 15
Sama juga dengan : A[2]++;
printf(“%i”, A[2] ); P
408
5. 0 1 2 3 4
Dengan : printf(“%i”,++*P++ );
A 25 12 17 10 15
Tercetak : 18
P
Instruksi diatas sebenarnya tiga Elemen yang ditunjuk oleh Pointer P, isinya
instruksi: ditambah 1 lebih dulu. Kemudian baru dicetak.
Setelah mencetak Pointer P bergerak satu
++*P langkah ke kanan
printf(“%d”, *P);
P++; 0 1 2 3 4
409
Contoh-03b Mencetak isi array
P=A
Tercetak : 12 printf
17 *P
10
P++
15
P
Contoh-04 Mengisi array satu dimensi
Susun program (penggalan program) untuk menyiapkan array satu dimensi
tipe integer sebanyak 5 elemen dengan nama A, kemudian mengisi array
tersebut sehingga isinya menjadi sebagai berikut :
0 1 2 3 4
A 1 2 3 4 5 P=A
N=1
int I,*P, N, A[5];
P = A; N = 1; I=1
for(I=1; I <= 5; I++ )
{ *P = N;
I++
P++;
N++;
P++
}
410
18.2.3 Pointer menunjuk alamat elemen array dua dimensi
Contoh-01. Mencetak isi array dua dimensi
Contoh-01-a
(1) Dengan instruksi no (1) terbentuk
#include <stdio.h>
sebuah array dua dimensi A[3][5]
void main()
yang biasa diilustrasikan dengan
(1) { char A[3][5] = { “ABCDE”,
gambar sebagai berikut :
“FGHIJ”,
“KLMNO” }; 0 1 2 3 4
(2) char *P;
0 A B C D E
(3) P = &A[0][0];
(4) printf(“\n%c”, *P ); 1 F G H I J
} 2 K L M N O
Tercetak : A
Sebenarnya oleh Bahasa C, array diatas, strukturnya dalam memory dibuat tersusun
dengan ilustrasi sebagai berikut :
0,0 0,1 0,2 0,3 0,4 1,0 1,1 1,2 1,3 1,4 2,0 2,1 2,2 2,3 2,4
A B C D E F G H I J K L M N O
baris-0 baris-1 baris-2
0,0 maksudnya mewakili A[0][0]
0,0 0,1 0,2 0,3 0,4 1,0 1,1 1,2 1,3 1,4 2,0 2,1 2,2 2,3 2,4
A B C D E F G H I J K L M N O
411
Contoh-01b Contoh-01c
#include <stdio.h> #include <stdio.h>
void main() void main()
{ char A[3][5] = { “ABCDE”, { char A[3][5] = { “ABCDE”,
“FGHIJ”, “FGHIJ”,
“KLMNO” }; “KLMNO” };
char *P; char *P;
int I; int I, J;
P = &A[0][0]; P = &A[0][0];
for( I=1; I <= 3; I++ )
for( I=1; I <= 15: I++ ) { for( J = 1; J <=5; J++ )
{ printf(“%2c”, *P ); { printf(“%3c”, *P );
P++; P++;
} }
} printf( “\n “ );
}
}
Tercetak: Tercetak : A B C D E
A B C D E F G H I J K L M N O F G H I J
K L M N O
Contoh-01d Contoh-01e
412
Contoh-02. Mencgisi array dua dimensi
Soal :
Susun program (penggalan program) untuk menyiapkan array dua dimensi 3x5 bertipe
integer dengan nana A. Kemudian mengisi array tersebut sehingga isinya sebagai berikut
:
0 1 2 3 4
0 1 2 3 4 5
1 6 7 8 9 10
A
2 11 12 13 14 15
Catatan : Didalam memory array dua dimensi diatas sebenarnya secara fisik tersusun
sebagai berikut :
0,0 0,1 0,2 0,3 0,4 1,0 1,1 1,2 1,3 1,4 2,0 2,1 2,2 2,3 2,4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
baris-0 baris-1 baris-2
Jawab :
413
18.3 Soal-soal Latihan Mandiri
1. #include<stdio.h> 2. #include<stdio.h>
void main() void main()
{ int A, B, T, *P, *Q, *R ; { int I,*P;
A = 25; B = 12; int A[5]={15,12,25,17,10};
P = &A; Q = &B; R = &T; P = A;
*R = *P + *Q; P = P + 2;
printf(“%i”, *R ); printf(“%i”, *P);
} }
3. 4.
#include<stdio.h> #include<stdio.h>
void main() void main()
{ int I,*P; { int I,*P;
int A[5]={15,12,25,17,10}; int A[5]={15,12,25,17,10};
P = &A[2]; P = &A[2];
printf(“%i”, *++P); printf(“%i”, *--P);
printf(“\n%i”, *P); printf(“\n%i”, *P);
} }
5. #include<stdio.h>
6. #include<stdio.h>
void main() void main()
{ int I,*P; { int I,*P;
int A[5]={15,12,25,17,10}; int A[5]={15,12,25,17,10};
P = &A[2]; P = &A[2];
printf(“%i”, ++*P++); printf(“%i”, --*P--);
printf(“\n%i”, *P); printf(“\n%i”, *P);
} }
7. 8. #include<stdio.h>
#include<stdio.h>
void main() void main()
{ int I,*P; { int I,*P;
int A[5]={15,12,25,17,10}; int A[5]={15,12,25,17,10};
P = A; P = A;
I=0; I=1;
while(I <= 4) while(I <= 3)
{ printf(“\n%i”, *P); { printf(“\n%i”, *P);
P = P + 1; P = P + 2;
I = I + 2; I = I + 1;
} }
414
Soal-02. Sudah dibuat array dua dimensi int A[3][5] lengkap dengan isinya, dengan
ilustrasi sebagai berikut :
Ilustrasi array dua Yang secara fisik susunannya dalam memory sebagai berikut :
dimensi A[3][5]
0 1 2 3 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 15 12 25 17 10 15 12 25 17 10 21 30 32 23 35 16 8 7 40 11
1 21 30 32 23 35
2 16 8 7 40 11
Apa yang tercetak bila isi array tersebut dicetak dengan menambahkan
instruksi sebagai berikut :
1. 2.
int I,*P; int I,*P;
P = &A[0][0]; P = &A[0][0];
I=1; I=1;
while(I <= 15) while(I <= 15)
{ printf(“%3i”, *P); { printf(“%3i”, *P);
P++; P+=2;
I++; I+=5;
} }
415
Soal-03. Sudah ada array A Satu Dimensi yang dibuat dengan int A[11].
Belum ada isinya dengan ilustrasi sebagai berikut :
0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8 9 10
Susun program (penggalan program) a. 1 2 3 4 5 6
untuk mengisi array tersebut dengan
menggunakan
Pointer
sehingga isinya menjadi sebagai b.
0
1
1 2
3
3 4
5
5 6
7
7 8
9
9 10
11
tergambar disebelah kanan :
0 1 2 3 4 5 6 7 8 9 10
b. 0 1 3 6 10
Soal-04. Sudah ada array Dua Dimensi yang dibuat dengan int A[3][5],
belum ada isinya. Susun program (penggalan program) untuk mengisi array A
tersebut dengan menggunakan pointer, sehingga isinya menjadi :
a. b. c.
1 2 3 4 5 1 2 3 1 3 5
6 7 8 9 10 4 5 6 7 9
11 12 13 14 15 7 8 9 11 13 15
d. e. f.
1 2 3 1 2 4 1 4 7 10 13
4 7 2 5 8 11 14
6 11 3 6 9 12 15
416