p12 Pointer2
p12 Pointer2
POINTER 2
A. Tujuan
1. Menjelaskan tentang Array of Pointer
2. Menjelaskan tentang Pointer to Pointer
3. Menjelaskan tentang Pointer dalam Fungsi
4. Menjelaskan tentang Pointer sebagai Parameter Fungsi
5. Menjelaskan tentang Pointer sebagai Keluaran Fungsi
B. Dasar Teori
Array dari Pointer (Array of Pointer)
Suatu array bisa digunakan untuk menyimpan sejumlah pointer. Sebagai contoh:
char *namahari[10];
merupakan pernyataan untuk mendeklarasikan array pointer. Array namahari terdiri
dari 10 elemen berupa pointer yang menunjuk ke data bertipe char.
xxx ?
x ?
?
?
?
namahari
Gambar 8.5 Array pointer
{“Senin”,
“Selasa”,
“Rabu”,
“Kamis”,
“Jumat”,
“Sabtu”,
“Minggu”};
107
Pada contoh ini,
namahari[0] berisi alamat yang menunjuk ke string “Senin”.
namahari[1] berisi alamat yang menunjuk ke string “Selasa”.
namahari[2] berisi alamat yang menunjuk ke string “Rabu”.
dan sebagainya.
alamat alamat
nilai
ptr1 ptr1
Untuk membentuk rantai pointer seperti pada gambar di atas, pendeklarasian yang
diperlukan berupa
int var_x;
int *ptr1;
int **ptr2;
ptr1 = &var_x;
ptr2 = &ptr1;
108
Pointer dalam Fungsi
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi :
Pointer sebagai parameter fungsi
Pointer sebagai keluaran fungsi
Fungsi di atas dimaksudkan agar kalau dipanggil, variabel yang berkenaan dengan
parameter aktual dapat diubah nilainya, masing-masing dinaikkan sebesar 2. Contoh
pemanggilan :
naikkan_nilai(&a, &b);
Perhatikan, dalam hal ini variabel a dan b harus ditulis diawali operator alamat (&)
yang berarti menyatakan alamat variabel, sebab parameter fungsi dalam pendefinisian
berupa pointer.
109
Pada definisi fungsi di atas,
char *nama_bulan()
C. TUGAS PENDAHULUAN
1. Buat program dengan menggunakan fungsi! Serta gambarkan ilustrasi alokasi memori
dari setiap baris pernyataan!
#include <stdio.h>
main()
{
int a = 4;
int b = 7;
int *x, *y;
x=&a;
y=&b;
printf("SEMULA : a = %d b = %d\n", a, b);
*x = *x * 4;
*y = *y + *x;
printf("KINI : a = %d b = %d\n", a, b);
}
D. PERCOBAAN
1. Tuliskan alokasi memori dari setiap baris pernyataan berikut serta tampilkan
hasilnya!
#include <stdio.h>
main()
{
int var_x = 20;
110
int *ptr1;
int **ptr2;
ptr1 = &var_x;
ptr2 = &ptr1;
*ptr1=var_x +**ptr2;
printf("Nilai var_x = *ptr1 = %d\n", *ptr1);
printf("Nilai var_x = **ptr2 = %d\n\n", **ptr2);
2. Berikan ilustrasi dan jelaskan apa yang dilakukan oleh program di bawah ini dan
tampilkan hasil eksekusinya.
#include <stdio.h>
int r, q = 10;
main()
{
int *ptr1 = &q;
int *ptr2 = &q;
r = go_crazy(ptr2, ptr1);
printf("q = %d, r = %d, *ptr1 = %d, *ptr2 = %d\n",
q, r,*ptr1,*ptr2);
ptr1 = &r;
q = go_crazy(ptr1, ptr2);
r=r*5;
q = q + r;
printf("q = %d, r = %d, *ptr1 = %d, *ptr2 = %d\n",
q, r,*ptr1,*ptr2);
}
r = 12;
*p2 = *p1 * 2;
p1 = &x;
return *p1 * 3;
}
}
3. Berikan ilustrasi dan jelaskan apa yang dilakukan oleh program di bawah ini dan
tampilkan hasil eksekusinya.
#include <stdio.h>
111
char strA[80] = "halo apa kabar";
char strB[80];
main()
{
puts(strA);
pA = strA;
puts(pA);
pB = strB;
putchar('\n');
while(*pA != '\0')
{
*pB++ = *pA++;
}
*pB = '\0';
puts(strB);
}
4. Berikan ilustrasi dan jelaskan apa yang dilakukan oleh program di bawah ini
#include <stdio.h>
char *my_strcpy(char *, char *);
main()
{
my_strcpy(strB, strA);
puts(strB);
}
5. Bandingkan fungsi my_strcpy di atas dengan fungsi my_strcpy di bawah ini. Berikan
penjelasan terhadap perbedaan proses dari kedua fungsi tersebut
char *my_strcpy(char dest[], char source[])
{
int i = 0;
while (source[i] != '\0')
112
{
dest[i] = source[i];
i++;
}
dest[i] = '\0';
return dest;
}
E. LAPORAN RESMI
1. Kumpulkan listing program, ilustrasi alokasi memorinya beserta hasil eksekusinya
113