PERCOBAAN 9
VARIABEL POINTER & PENGGUNAANYA DALAM FUNGSI
TUJUAN : Mempelajari penggunaan variabel pointer yang dipadukan dengan variabel bertipe integer, array, dan string, serta penggunaan pointer dalam suatu fungsi, baik sebagai penujuk fungsi maupun argumen fungsi. Dipelajari juga pointer yang menunjuk pointer lainnya.
TEORI : Suatu pointer adalah suatu variabel yang menyimpan aamat dari suatu variabel yang ditunjuk oleh pointer yang bersangkutan. Karena data yang ditunjuk pointer bervariasi, maka tipe dari pointer harus disesuaikan dengan tipe data yang ditunjuk., untuk memperkirakan ukuran data yang ditunju, sehingga alokasi memori terjaga dengan baik. Pointer berguna untuk mentransfer data yang mempunyai kapasitas besar, melalui suatu fungsi. Pointer sangat erat hubungannya dengan array.
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
/* 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
/* 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();
}
- Penggunaan 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();
}
TUGAS
- Membuat program untuk menyimpan bilangan pecahan acak sebanyak 12 bilangan, kemudian mengurutkan bilangan tersebut.
#include<stdio.h>
#include<string.h>
main()
{
int a,b[13],c,d;
printf(” Angka sebelum diurutkan adalah = \n”);
for(a=1;a<13;a++)
{
printf(” Masukkan angka ke %d = “,a);
scanf(“%d”,&b[a]);
}
printf(“\n Angka setelah diurutkan adalah = \n”);
for(a=1;a<13;a++)
{
for(d=a+1;d<13;d++)
{
if(*(b+a)>*(b+d))
{
c=*(b+d);
*(b+d)=*(b+a);
*(b+a)=c;
}
}
printf(” Angka ke %d = %d\n”,a,*(b+a));
}
}
bagaimana sobat redaksi, apakah masih bingung atau sudah paham? jika masih belum paham berlatih untuk soal latihan lainnya. selamat belajar…
Recent Comments