POINTER 2
Juanda
2040201115
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 ?
?
?
?
?
namahari
Gambar 8.5 Array pointer
{“Senin”,
“Selasa”,
“Rabu”,
“Kamis”,
“Jumat”,
“Sabtu”,
“Minggu”};
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.
▪ 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;
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.
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()
{ X = 1000
int a = 4;
int b = 7;
int *x, *y;
Y = 1000
x=&a; y=&b;
printf("SEMULA : a = %d b = %d\n", a, b);
B = 16 23
*x = *x * 4;
*y = *y + *x;
printf("KINI : a = %d b = %d\n", a, b); A=47
}
D. PERCOBAAN
1. Tuliskan alokasi memori dari setiap baris pernyataan berikut serta
tampilkan hasilnya!
#include <stdio.h>
main()
{
int var_x = 20;
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);
Hasil
Nilai var_x = *ptr1 = 40
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;
}
Penjelasan
Pada program tersebut terdapat variable r dan q =10 dengan tipe integer dan
fungsi go- crazy() yang juga bertipe integer dengan pointer sebagai parameter
fungsinya. Dalam fungsi main() terdapat variable *ptr1 yang diberikan pada alamt q
begitu juga dengan variable *ptr2. Pada variable r ada pemanggilan fungsi
go_crazy(ptr1, ptr2). Dimana ptr2 = *p1 dan ptr1 = *p2. Untuk *p2 = *p1 * 2
dimana
*p1 = ptr2 = q = 10, jadi nilai *p2 adalah 10 * 2 = 20. Nilai 20 ini akan diberikan
kepada alamat 1, *ptr1 dan *ptr2. Untuk *p1 = 5 * 3 hasilnya 15 diberikan pada
variable r. Lalu akan dicetak hasil dari r, q, *ptr1, *ptr2.
Selanjutnya ptr1 diberikan kepada alamat dari r. Pada variable q ada pemanggilan
fungsi go_crazy(int *p1, int *p2) dimana ptr1 = *p1 dan ptr2 = *p2. Untuk *p1 = &x
* 3 jadi nilai *p1 = 5 * 3 = 15 yang akan diberikan pada variable q. Untuk r = r * 5
dengan nilai r = 12 jadi hasilnya 12 * 5 = 60 yang akan diberikan pada *ptr1.
Kemudian diproses kembali q = q + r dimana variable yang semula bernilai 15
akan ditambah dengan r yang bernilai 60, sehingga hasilnya menjadi 75 yang kana
diberikan pada *ptr2. Lalu akan dicetak hasil dari q, r, *ptr1, *ptr2
Hasil
Q = 20, r = 15, *ptr1 = 20, *ptr2 = 20
Q = 75, r = 60, *ptr1 = 60, *ptr2 = 7
3. Berikan ilustrasi dan jelaskan apa yang dilakukan oleh program di bawah ini dan
tampilkan hasil eksekusinya.
#include <stdio.h>
main()
{
puts(strA);
pA = strA;
puts(pA);
pB = strB;
putchar('\n');
while(*pA != '\0')
{
*pB++ = *pA++;
}
*pB = '\0';
puts(strB);
}
Penjelasan
Pada program tersebut terdapat array strA dengan batas maksimal 80 karakter yang
berisikan “halo apa kabar” dengan tipe char dan strB dengan batas maksimal 80
karakter bertipe char juga. Di dalam fungsi main terdapat variable *pa dan *pb yang
bertipe char. Hasil dari strA “halo apa kabar” akan dicetak melalui fungsi puts() tadi.
Setelah itu masuk ke proses pA = strA yang berarti hasilnya nanti akan dicetak sama
seperti strA yaitu “halo apa kabar” pada fungsi puts(). Kemudian ke proses pB = strB
dan mencetak sebuah baris baru. Apabila *pA tidak bernilai null maka akan berjalan
program dibawahnya yaitu *pB++ sama dengan *pA++. Ketika *pB sudah null maka
strB akan dicetak yaitu “halo apa kabar”
Hasil
halo apa kabar
halo apa kabar
halo apa kabar
4. Berikan ilustrasi dan jelaskan apa yang dilakukan oleh program di bawah ini
#include <stdio.h>
char *my_strcpy(char *, char *);
main()
{
char strA[80]="A string to be used for demonstration";
char strB[80];
my_strcpy(strB, strA);
puts(strB);
}
char *my_strcpy(char *destination, char *source)
{
char *p = destination;
while (*source != '\0')
{
*p++ = *source++;
}
*p = '\0';
return destination;
}
Penjelasan
Fungsi my_strcpy akan mengeluarkan fungsi berupa pointer yang bertipe char,
strA[80] yang berisikan string “a string to be used for demonstration” dan juga
strB[80] juga bertipe char. Setelah itu fungsi my_strcpy(strB, strA) dipanggil dan
juga mencetak strB. StrB berisi destination dan strA berisi source dalam fungsi
tersebut.
Apabila *source tidak bernilai 0 maka akan berjalan program yang dibawahnya yaitu
variable yang ditunjuk oleh p diisi dengan variable yang ditunjuk oleh source.
Kemudian isi dari p tadi ditambah null. Lalu yang terakhir akan kembali lagi pada
destination atau strB.
Hasil
A string to be used for demonstration
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')
{
dest[i] = source[i];
i++;
}
dest[i] = '\0';
return dest;
}
Penjelasan
Fungsi my_strcpy akan mengeluarkan fungsi berupa pointer yang bertipe char,
strA[80] yang berisikan string “a string to be used for demonstration” dan juga
strB[80] juga bertipe char. Setelah itu fungsi my_strcpy(strB, strA) dipanggil dan juga
mencetak strB. StrB berisi destination dan strA berisi source dalam fungsi tersebut.
Diketahui nilai dari int I adalah 0. Apabila source setiap nilai[i] tidak bernilai 0
maka akan berjalan program yang dibawahnya yaitu nilai setiap dest[i] berisikan
nilai pada setiap source[i]. Nilai I juga bertambah satu disetiap prosesnya. Kemudian
nilai pada dest[i] tadi ditambah null. Lalu yang terakhir akan kembali lagi pada
destination.
E. LAPORAN RESMI
1. Kumpulkan listing program, ilustrasi alokasi memorinya beserta hasil eksekusinya
Percobaan1
Percobaan2
Listing program dan hasil eksekusi
Ptr1 = 10001002
Ptr2 = 1000
X=5
Q = 102060
r = kosong 12 15 75
Percobaan3
Listing program dan hasil eksekusi
pA = 1000
pB = 1000
Percobaan4
Listing program dan hasil eksekusi
&pA = 1000
&pB = 1000
Percobaan5
Listing program dan hasil eksekusi
dest = 1000
source = 1000
F. ANALISA
Dari percobaan diatas dapat dianalisa bahwa suatu array bisa digunakan untuk
menyimpan sejumlah pointer. Array pointer juga bisa diinisialisasi sewaktu
pendeklarasian. Suatu pointer bisa saja menunjuk ke pointer lain, seperti pointer ptr2
(menunjuk ke pointer int) menunjuk pointer ptr1 (menunjuk ke data bertipe int)
menunjuk variabel var_x (tipe int).
Pointer dan kaitannya dengan fungsi yang dibahas ada 2 yaitu pointer sebagai
parameter fungsi (percobaan 2), pointer sebagai keluaran fungsi (percobaan 4 dan 5).
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu variabel
internal dapat diubah oleh fungsi yang dipanggil. Suatu fungsi juga dapat dibuat agar
keluarannya berupa pointer. Pada percobaan 1 merupakan contoh pointer to pointer.
Percobaan 3 merupakan contoh array of pointer dimana strB dan strA adalah sama dan
pA pB merupakan pointer dari strA strB.
G. KESIMPULAN
Dari percoban yang telah dilakukan dapat ditarik kesimpulan bahwa suatu array ini
bisa juga digunakan untuk menyimpan sejumlah pointer. Array pointer bisa
diinisialisasi sewaktu pendeklarasian. Suatu pointer bisa menunjuk pointer lain. Dalam
penulisannya pun harus benar dan sesuai dengan ketentuan yang berlaku agar program
dapat berjalan.