Dokumen tersebut membahas tentang pemrograman pointer dalam bahasa C. Pointer adalah variabel yang menyimpan alamat memori dari objek lain seperti variabel. Dokumen tersebut memberikan contoh penggunaan pointer untuk menukar nilai variabel, menyimpan dan mengakses nilai variabel, serta implementasi stack menggunakan pointer.
1. BAB VIII PEMROGRAMAN POINTER
Pertemuan Minggu XI dan XII
Alokasi Waktu
:
4 Jam Pertemuan
Standar Kompetensi
:
Mahasiswa dapat membuat program komputer sederhana dengan menggunakan bahasa
C
Kompetensi Dasar
:
Memahami program komputer yang menggunakan struktur Pointer
Indikator
:
Mahasiswa dapat memahami struktur program bahasa C yang mengandung Pointer
:
Mahasiswa dapat membuat program dengan melibatkan Pointer
pointer adalah variabel yang menyimpan alamat memori. Alamat ini adalah lokasi obyek lain (biasanya
variabel lain) di memori. Misalnya, jika satu variabel berisi alamat dari variabel lain, variabel pertama
dikatakan menunjuk ke variable kedua. Analogy konsep pointer adalah ketika kita ingin berkenalan
dengan seseoarang akan tetapi kita tidak dapat menyapanya secara langsung maka biasanya kita akan
bertanya kepada teman atau sahabatnya yang kebetulan kita kenal. Orang yang kita tanya perihal
seseorang yang ingin kita ketahui identitasnya adalah seorang Pointer (Penunjuk). Analogy yang lain
ketika kita ingin berkunjung ke suatu alamat akan tetapi kita tidak tahu di daerah mana alamat tersebut
berada maka kita akan bertanya kepada orang yang kita anggap tahu tentag alamat tersebut, orang yang
memberikan penjelasan tentang perihal alamat yang kita tanyakan itulah yang kita sebuat dengan Pointer.
Poiter adalah variabel yang berisi alamat memori variabel lain dan secara tidak langsung menunjuk ke
variabel tersebut. Sebagai contoh Andi berteman dengan Budi, lalu anda ingin mengetahui jumlah
keluarga Budi untuk keperluan sensus penduduk. Anda tidak mengetahui alamat Budi, tetapi anda
mengenal Andi. Untuk mencari jumlah keluarga Budi, maka pertama-tama anda pergi ke rumah Andi,
misalnya di rumah No. 8321. Sesampai di Andi, Andi membaritahukan kepada anda bahwa alamat Budi
ada pada alamat 9821. Kemudian anda pergi ke rumah Budi lalu mencatat jumlah keluarga yang dimiliki
Budi yaitu lima orang (misalkan). Dalam contoh di atas, Andi bertindak sebagai pointer. Andi tidak
memberitahukan jumlah keluarga Budi, tetapi Andi memberitahu alamat Budi, di alamat 9821 (alamat
Budi) itulah Anda mengetahui jumlah keluarga Budi. Jika alamat dari ditunjukkan dengan simbol & dan
isi dari ditunjukkan dengan symbol *, maka hubungan analogi di atas adalah:
Jika variabel akan menjadi penunjuk, itu harus dinyatakan sebagai demikian. Sebuah deklarasi pointer
terdiri dari jenis dasar, *, dan nama variabel. Bentuk umum untuk mendeklarasikan variabel pointer
Tipe *nama_variabel
ketika Anda menyatakan pointer brtipe int *, maka compiler mengasumsikan bahwa semua alamat yang
akan ditunjuk oleh varibel pointer tersebut menunjuk ke sebuah variable yang betipe integer.
1
2. Contoh 8.1
#include <stdio.h>
#include <conio.h>
main()
{
int x = 99;
int *p1, *p2;
p1 = &x;
p2 = p1;
/* print the value of x twice */
printf("Values at p1 and p2: %d % dn", *p1, *p2);
/* print the address of x twice */
printf("Addresses pointed to by p1 and p2: %p %p", p1, p2);
getch();
}
Contoh 8.2
#include <stdio.h>
#include <conio.h>
main()
{
int U = 3;
int v;
int *pu; /* pointer t o an integer */
int *pv; /* pointer t o an integer */
pu = &U; /* assign address of U t o pu */
v = *pu; /* assign value of U t o v */
pv = &v; /* assign address of v t o pv */
printf("nu=%d &u=%X pu=%X *pu=%d", U, &U, pu, *pu);
printf("nnv=%d &v=%X pv=%x *pv=%d", v, &v, pv, *pv);
getch();
}
Pada program diatas menyatakan pointer *s digunakan sebagai penunjuk variable kata yang berbentuk
array dan bertipe char. Pointer *s ini digunakan sebagai argument fungsi hitung yang akan
mengembalikan nilai integer apabila fungsi hitung tersebut dipanggil. Dengan kata lain fungsi hitung akan
memberikan nilai berupa angka dari suatu masukan yang diberikan pada variable kata yang berupa
sederet char (string).
Contoh 8.3
2
3. #include <stdio.h>
#include <conio.h>
void tukar(int *a, int *b);
main()
{
int x,y;
printf("Masukan nilai ke 1: ");
scanf("%d",&x);
printf("Masukan nilai ke 2: ");
scanf("%d",&y);
tukar(&x,&y);
printf ("Setelah ditukarkan Nilai ke 1 %dn",x);
printf ("Setelah ditukarkan Nilai ke 2 %d",y);
getch();
}
void tukar(int *a, int *b)
{
int smt;
smt = *a;
*a = *b;
*b = smt;
}
Contoh 8.4
#include <stdio.h>
#include <conio.h>
main()
{
int number = 0; /* A variable of type int initialized to 0 */
int *pointer = NULL; /* A pointer that can point to type int */
number = 10;
printf("nnumber's address: %p", &number); /* Output the address */
printf("nnumber's value: %dnn", number); /* Output the value */
pointer = &number; /* Store the address of number in pointer */
printf("pointer's address: %p", &pointer); /* Output the address */
printf("npointer's size: %d bytes", sizeof(pointer)); /* Output the size */
printf("npointer's value: %p", pointer); /* Output the value (an address) */
printf("nvalue pointed to: %dn", *pointer); /* Value at the address */
getch();
}
Contoh 8.5
#include <stdio.h>
3
4. #include <conio.h>
void funct1 (int U, int v); /* function prototype */
void funct2 (int *pu, int *pv); /* function prototype */
main ()
{
int u = 1;
int v = 3;
printf ( "n Before calling functl : u=%d v=%d", u, v);
funct1 (u, v);
printf ( "n After calling functl : u=%d v=%d", u, v);
printf ("nn Before calling funct2: u=%d v=%d", u, v) ;
funct2(&u, &v);
printf ("n After calling funct2: u=%d v=%d", u, v);
getch();
}
void funct1 (int U, int v)
{
U = 0;
v = 0;
printf ( " n Within functl : u=%d v=%d", U, v);
return;
}
void funct2 (int *pu, int *pv)
{
*pu = 0;
*pv = 0;
printf ("n Within funct2: *pu=%d *pv=%d", *pu, *pv) ;
return;
}
Pengayaan
Latihan 8.1
#include <stdio.h>
#include <conio.h>
int hitung(char *s);
main()
{
char kata[80];
printf("Masukan Sebuah Kata : n");
scanf("%s",&kata);
printf("%d",hitung(kata));
getch();
}
int hitung(char *s)
4
5. {
int i=0;
for (;*s!='0'; *s++)
i++;
return(i);
}
Latihan 8.2
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define size 10
void push(int i);
int pop(void);
int *tos, *p1, stack[size];
main()
{
int value;
p1 = stack;
tos = stack;
do {
printf("Enter value: ");
scanf("%d", &value);
if(value != 0) push(value);
else {printf("value on top is %dn", pop());
printf("Alamat Memori %pn",(p1+1));}
} while(value != -1);
getch();
}
void push(int i)
{
p1++;
if(p1 == (tos+size))
{
printf("Stack Overflow.n");
exit(1);
}
*p1 = i;
}
int pop(void)
{
if(p1 == tos) {
printf("Stack Underflow. n");
exit(1);
}
p1--;
return *(p1+1);
}
5