DIKTAT MATA KULIAH PEMROGRAMAN I
IF
BAB XI
POINTER
Dasar Teori
Pointer adalah sebuah variabel yang isi datanya adalah alamat memori atau variabel lain.
Sehingga pointer dapat juga disebut sebagai variabel alamat (address variable). Dengan kata lain,
pointer berisi alamat dari variabel yang mempunyai nilai tertentu.
Deklarasi Pointer
Bentuk deklarasi dari pointer adalah sebagai berikut :
tipe_data *nama_variabel ;
Keterangan dari deklarasi diatas adalah sebagai berikut :
tipe_data
:
tipe data dasar dari pointer
nama_variabel :
Nama variabel pointer
*
:
operator memori yang fungsinya untuk mengembalikan nilai
variabel pada alamat
Agar suatu pointer menunjuk ke variabel lain, mula-mula pointer harus diisi dengan
alamat dari variabel yang ditunjuk. Untuk menyatakan alamat dari suatu variabel, digunaan
operator & didepan nama variabel.
jika *x adalah variabel bertipe int, maka pointer px yang berisi
alamat dari variabel x ditulis sebagai :
int *x ;
Untuk mengakses isi dari suatu variabel melalui pointer, perlu dinyatakan dulu
penunjukkan alamat dari variabel tersebut. Dua pernyataan dibawah ini menunjukkan bahwa
nilai y adalah sama dengan nilai x.
px = &x
pointer px berisi alamat dari variabel x
y = *px
variabel y berisi nilai yang ditunjuk oleh pointer px
Antara tipe pointer dan tipe obyek yang akan ditunjuk oleh pointer haruslah sejenis. Jika
tidak sejenis akan menimbulkan kesalahan. Contoh :
int x ;
x adalah obyek
int *px ;
px adalah pointer yang menunjuk obyek x
Contoh Kasus :
Anda diminta untuk membuatkan program yang akan menampilkan suatu nilai dalam suatu
variabel tertentu dan menampilkan juga alamat suatu pointer yang isinya sama dengan yang
ditunjuk oleh variabel tadi.
Penyelesaian :
Algoritma yang digunakan untuk memecahkan masalah diatas adalah sebagai berikut :
1.
Tentukan variabel yang menampung suatu nilai tertentu, misalkan nilai ini bertipe integer
dan nama variabel nya adalah z. (
misalkan int z
)
2.
Tentukan variabel pointer yang nantinya isinya akan menunjuk pada variabel pada
langkah no.1. (
misalkan variabel *p
)
3.
Tentukan variabel lain yang isinya menunjuk ke variabel pertama dalam langkah no.1.
(
misalkan variabel p dan prosesnya adalah p = &z)
4.
Masukan suatu nilai yang disimpan pada variabel z
5.
Tampilkan nilai tersebut
6.
Tampilkan memori yang tepat untuk menyimpan variabel pointer yang sesuai dengan
Implementasi dari kasus diatas adalah :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /* Program 11-1Nama File : Program 11-1.c Programmer : Eko Budi Setiawan */
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) {
int z=4,*p;
p=&z; // penugasan
printf("Nilai z = %d \n",z); printf("Nilai *p = %d \n", *p); printf("Alamatnya = %p \n", p); system("PAUSE"); return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 /* Program 11-1
Nama File : Program 11-1.cpp Programmer : Eko Budi Setiawan */
#include <cstdlib> #include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
int z=4; int *p; p = &z;
cout<<"Nilai z = "<<z<<endl; cout<<"Nilai *p = "<<*p<<endl; cout<<"Alamatnya = "<<p<<endl<<endl; system("PAUSE");
Gambar 11.1 Tampilan Program 11-1
Pointer dan Array
Sebagai contoh didefinisikan sebuah array untuk menyimpan data tanggal lahir sebagai
berikut :
int tgl_lahir [3] = {16, 10, 1993};
int *ptgl_lahir ; // pointer yang akan menunjuk array tsb
Maka pointer yang ditugaskan terhadap variabel array tersebut adalah sebagai berikut :
ptgl_lahir = tgl_lahir;
atau
ptgl_lahir = &ptgl_lahir [indeks];
ptgl_lahir = &tgl_lahir [0];
Penjelasannya adalah : Pointer ptgl_lahir berisikan alamat dari array tgl_lahir yang ke 0
(alamat pertama dari array tgl_lahir). Jika ingin menampilkan seluruh elemen array tlg_lahir,
instruksi yang biasa dilakukan adalah berupa :
for (i=0; i<3;i++)
printf (“%d”, tgl_lahir[i]);
Instruksi diatas, jika menggunakan pointer dapat dirubah menjadi :
ptgl_lahir = tgl_lahir;
for (i=0; i<3;i++)
Untuk lebih jelasnya, dapat dilihat contoh dibawah ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 /* Program 11-2Nama File : Program 10-2.c Programmer : Eko Budi Setiawan */
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) {
int tgl_lahir[]={31,12,1999}; int *ptgl_lahir, i;
ptgl_lahir=tgl_lahir; for (i=0; i<3; i++) {
printf("Nilai Ke - %d = %d\n", i+1, *ptgl_lahir); printf("Alamat Ke - %d = %p\n", i+1, ptgl_lahir); ptgl_lahir++;
// bisa juga seperti ini
// printf("Nilai Ke - %d = %d\n", i+1, *(ptgl_lahir+i)); // printf("Nilai Ke - %d = %d\n", i+1, (ptgl_lahir+i)); printf("\n"); } system("PAUSE"); return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /* Program 11-2
Nama File : Program 11-2.cpp Programmer : Eko Budi Setiawan */
#include <cstdlib> #include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
int tgl_lahir[]={31,12,1999}; int *ptgl_lahir, i;
ptgl_lahir=tgl_lahir; for (i=0; i<3; i++) {
20 21 22 23 24 25
ptgl_lahir++; cout<<"\n"; }
system("PAUSE"); return EXIT_SUCCESS; }
Gambar 11.2 Tampilan Program 11-2
Pointer dan String
Sebagai contoh kasus penggunaan pointer dan string, perhatikan masalah berikut ini.
Misalkan kita diminta untuk menampilkan teks dengan pointer. Maka algoritma untuk menjawab
permasalahan diatas adalah sebagai berikut :
1.
Tentukan variabel pointer yang menampung teks dengan tipenya adalah char (misalkan
*teks)
2.
Tentukan kalimat yang akan ditunjuk oleh pointer
3.
Tampilkan variabel pointer teks, yang isinya sudah menunjuk ke teks
4.
Tampilkan alamat teks tersebut
5.
Selesai
1 2 3 4 5 6 7 8 9 10 11
/*
Program 11-3
Nama File : Program 11-3.c Programmer : Eko Budi Setiawan */
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) {
12 13 14 15 16 17 18
teks="Pointer";
printf("Isi teks = %s\n", teks); printf("Alamat teks = %p\n", &teks); printf("\n");
system("PAUSE"); return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/*
Program 11-3
Nama File : Program 11-3.cpp Programmer : Eko Budi Setiawan */
#include <cstdlib> #include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
char *teks; teks="Pointer";
cout<<"Isi teks = "<<teks<<endl;
cout<<"Alamat teks = "<<&teks<<endl;//%p\n", &teks); cout<<"\n";
system("PAUSE"); return EXIT_SUCCESS; }
Pointer dalam Pointer
C dan C++ juga memperbolehkan penggunaan pointer didalam pointer yang
masing-masing berisi data yang sama atau berbeda. Bentuk umum dari pointer dalam pointer adalah
sebagai berikut :
// deklarasi
tipedata nama_variabel;
tipedata *pointer1; // menunjuk ke variabel
tipedata **pointer2; // menunjuk ke pointer
// penugasan
pointer1 = &nama_variabel;
pointer2 = &pointer1;
Pada kondisi pointer biasa atau pointer tunggal, diagramnya adalah sebagai berikut :
Pointer
Variabel
Sedangkan untu kondisi pointer dalam pointer, diagramnya adalah sebagai berikut :
Pointer
Pointer
Variabel
1 2 3 4 5 6 7 8 9 10 11 12
/*
Program 11-4
Nama File : Program 10-4.c Programmer : Eko Budi Setiawan */
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) {
int x, *y, **z;
address
nilai
13 14 15 16 17 18 19 20
x=5; y=&x; z=&y;
printf("Nilai X = %i\n",**z); printf("Alamat X = %p\n",z); system("PAUSE");
return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/*
Program 11-4
Nama File : Program 10-4.c Programmer : Eko Budi Setiawan */
#include <cstdlib> #include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
int x, *y, **z; x=5;
y=&x; z=&y;
cout<<"Nilai X = "<<**z<<endl; cout<<"Alamat X = "<<z<<endl; system("PAUSE");
return EXIT_SUCCESS; }