Assalamualaikum Wr. Wb.
Kembali lagi dengan saya Hudzaifah Rizqi Kamil dari PENS 2019 Jurusan D4 Teknik Elektronika B. pada post saya kali ini, kita akan membahas lebih lanjut seputar materi Algoritma dan Pemrograman Bahasa C. kira – kira apa ya?
Yap, sesuai dengan judul yang saya tulis, terdapat kata ‘POINTER’. Maka, dalam pembahasan kali ini, saya akan memaparkan variabel pointer dan bagaimana menggunakannya dalam sebuah fungsi. Harapannya, setelah mempelajari penggunaan dari variabel pointer yang akan dipadukan dengan berbagai tipe variabel (integer, array dan string), menggunakannya dalam sebuah fungsi (sebagai penunjuk fungsi maupun argument dalam fungsi) dan menggunakan sebuah pointer untuk menunjukan pointer lainnya.
TEORI
Apa itu Pointer? Pointer adalah penunjuk suatu variabel yang menyimpan alamat dari suatu variabel yang ditunjuk oleh pointer yang bersagkutan. Karena menunjuk suatu variabel, maka pointer wajib memiliki alamat dari variabel yang ditunjuknya. Kadangkala dalam program yang besar, penghematan memori wajib untuk dilakukan. Dengan mekanisme copy dan paste nilai variabel satu kedalam variabel lain, akan sangat memboroskan memori. Dengan mekanisme pointer, suatu variabel dalam suatu fungsi dapat diakses oleh fungsi yang lain. Pointer sangat erat kaitannya dengan array, sehingga variabel pointer dapat menggantika fungsi dari variabel array.
- Bagaimana cara mendeklarasikan sebuah pointer? Berikut bentuk umumnya :
tipe_data *nama_pointer;
atau
tipe_data* nama_pointer;
contoh :
long *P;
- Bagaimana jika kita menggunakan pointer untuk menunjuk sebuah variabel? Berikut contohnya :
long X;
(Deklarasi variabel x dengan tipe long)
long *P:
(Deklarasi pointer P)
P = &X;
(Pointer P menunjuk variabel X)
P adalah pointer (berisi alamat) dan &X juga berisi alamat (alamat variabel X), maka kita dapat menyimpan alamat dari variabel X tersebut ke dalam pointer P.
- Adakah bentuk program yang salah? Ada dong, seperti ini :
P = X;
Dalam program, x dinyatakan sebagai nilai (bukan alamat). Apabila kita memang ingin mengisikan nilai kedalam alamat yang disimpan oleh pointer P, maka seharusnya kita menggunakan tanda asterisk (*) di depan nama pointer tersebut, yaitu dengan mengubah kode diatas menjadi seperti dibawah ini:
*P = X;
PROGRAM PERCOBAAN
- Mengakses isi suatu variable melalui pointer.
/* Nama File : POINTER1.C */
void main()
{
int y, x = 2002; /* x & y bertipe int */
int *px; /* var pointer menunjuk data tipe int */
px = &x; /* px diisi alamat dari variabel x */
y = *px; /* y diisi nilai yang ditunjuk oleh px */
printf(“Alamat x = %p\n”, &x);
printf(“Isi px = %p\n”, px);
printf(“Isi x = %d\n”, x);
printf(“Nilai *px = %d\n”, *px);
printf(“Nilai y = %d\n”, y);
getch();
}
- Mengamati persamaan penggunaan variable index pada array dan variable index pada pointer, untuk menunjuk suatu nilai data didalam suatu variabel array
/* Nama File : STRING2.C */
void main()
{
int nilai[10]={86,75,98,66,56,76,80,95,70,60};
int index, *ip;
printf(“Mencetak menggunakan array\n”);
printf(“Daftar nilai siswa\n\n”);
for(index=0; index<10; index++)
printf(“%3d”,nilai[index]);
puts(“\n”);
printf(“Mencetak menggunakan pointer dan index\n”);
printf(“Daftar nilai siswa\n\n”);
for(index=0; index<10; index++)
printf(“%3d”,*(nilai+index));
puts(“\n”);
printf(“Mencetak menggunakan pointer\n”);
printf(“Daftar nilai siswa\n\n”);
ip=&nilai;
for(index=0; index<10; index++)
printf(“%3d”,*ip++);
getch();
}
- Pointer yang menunjuk ke pointer lain
/* Program : POINTER3.C */
void main()
{
int a, *b, **c;
a = 1975;
b = &a;
c = &b;
printf(“Nilai a = %d atau %d atau %d\n”, a, *b, **c);
printf(“b = %p = alamat a di memori\n”, b);
printf(“c = %p = alamat b di memori\n”, c);
printf(“alamat c di memori = %p\n”, &c);
getch();
}
- Fungsi dengan argumen berupa pointer
/* Nama File : POINTER4.C */
void naikkan_nilai(int *x, int *y);
main()
{
int a = 3, b = 7;
printf(“SEMULA : a = %d b = %d\n”, a, b);
naikkan_nilai(&a, &b);
printf(“SEKARANG : a = %d b = %d\n”, a, b);
getch();
}
void naikkan_nilai(int *x, int *y)
{
*x = *x + 2;
*y = *y + 3;
}
- Fungsi mempunyai nilai balik bertipe pointer, sehingga dapat digunakan untuk mengembalikan nilai yang panjang seperti nilai suatu string
/* Nama File : POINTER5.C */
#include <stdio.h>
char *nama_bulan(int n)
{
static char *bulan[] = {
“Kode bulan salah”,
“Januari”,”Februari”,”Maret”,”April”,”Mei”,”Juni”,
“Juli”,”Agustus”,”September”,”Oktober”,”November”,
“Desember”
};
return ((n<1||n>12) ? bulan[0] : bulan[n]);
}
void main()
{
int bl;
printf(“Masukkan kode Bulan [1..12] : “);
scanf(“%d”, &bl);
printf(“Bulan ke-%d adalah %s\n”, bl, nama_bulan(bl));
getch();
}
- Menggunakan fungsi *strlwr(str)
/* Nama File : POINTER6.C */
#include <stdlib.h>
#include<string.h>
void main()
{
char str1[80], str2[80], *ptrx;
strcpy(str1,”INI ADALAH HURUF BESAR SEMUA!!!”);
strcpy(str2,”ini adalah huruf kecil semua!!!”);
ptrx = NULL;
cputs(“Isi str1 = “); puts(str1);
cputs(“Isi str2 = “); puts(str2);
cputs(“Isi ptrx = “); puts(ptrx);
ptrx = (char *) calloc(80, sizeof(char));
ptrx = strlwr(str1);
puts(“\nSeletelah ‘str1’ diproses dengan strlwr()\n”);
cputs(“Isi str1 = “); puts(str1);
cputs(“Isi ptrx = “); puts(ptrx);
ptrx = strupr(str2);
puts(“\nSeletelah ‘str2’ diproses dengan strupr()\n”);
cputs(“Isi str2 = “); puts(str2);
cputs(“Isi ptrx = “); puts(ptrx);
getch();
}
Sekian yang dapat saya sampaikan, semoga dapat memberikan manfaat.
Terima Kasih
Wassalamualaiakum Wr. Wb.
Recent Comments