Praktikum 8
POINTER A. TUJUAN 1. Menjelaskan tentang konsep dari variabel pointer 2. Menjelaskan tentang pointer array 3. Menjelaskan tentang pointer string 4. Menjelaskan tentang array pointer 5. Menjelaskan tentang pointer dalam fungsi 6. Menjelaskan tentang pointer sebagai parameter fungsi 7. Menjelaskan tentang pointer yang menunjuk pointer.
B. PERCOBAAN 1. Mengakses isi suatu variabel melalui pointer. /* Program : ptr1.c */ #include <stdio.h> main() { int y, x = 87; /* x & y bertipe int */ int *px; /* var pointer yg menunjuk ke data yang bertipe int */ px = &x; y = *px;
/* px diisi dgn alamat dari variabel x */ /* y diisi dgn 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 yang ditunjuk oleh px = %d\n", *px); printf("Nilai y = %d\n", y); }
44
2. Mengakses isi suatu variabel melalui pointer. Tipe variabel pointer dan tipe data yang ditunjuk harus sejenis. /* Program : ptr2.c */ #include <stdio.h> main() { int *pu; int nu; int u = 1234; pu = &u; nu = *pu; printf("Alamat dari u = printf("Isi pu = printf("Isi u = printf("Nilai yang ditunjuk oleh pu = printf("Nilai nu =
%p\n", %p\n", %d\n", %d\n", %d\n",
&u); pu); u); *pu); nu);
}
3. Mengubah isi suatu variabel melalui pointer. /* Program : ptr3.c */ #include <stdio.h> main() { float d = 54.5f, *pd; printf("Isi d mula-mula = %g\n", d); pd = &d; *pd += 10; printf("Isi d sekarang
= %g\n", d);
}
4. Hubungan antara pointer dan array. Suatu nama array yang ditulis tanpa dengan indeksnya menunjukkan alamat elemen pertama dari array (versi 1). /* Program : ptr4.c */ #include <stdio.h> main() {
45
static int tgl_lahir[] = {16, 4, 1974}; int *ptgl; printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl); printf("Nilai dari tgl_lahir[0] = %d\n", tgl_lahir[0]); }
5. Hubungan antara pointer dan array. Suatu nama array yang ditulis tanpa dengan indeksnya menunjukkan alamat elemen pertama dari array (versi 2). /* Program : ptr5.c */ #include <stdio.h> main() { static int tgl_lahir[] = {16, 4, 1974}; int *ptgl, i; ptgl = tgl_lahir; printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl); for (i=0; i<3; i++) printf("Nilai dari tgl_lahir[i] = %d\n", *(ptgl+i)); }
6. Hubungan antara pointer dan array. Suatu nama array yang ditulis tanpa dengan indeksnya menunjukkan alamat elemen pertama dari array (versi 3). /* Program : ptr6.c */ #include <stdio.h> main() { static int tgl_lahir[] = {16, 4, 1974}; int i; int *ptgl; ptgl = tgl_lahir; printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl); for (i=0; i<3; i++) printf("Nilai dari tgl_lahir[i] = %d\n", *ptgl++); }
46
7. Menukarkan isi 2 string tanpa pemakaian pointer. /* Program : arrnama.c */ #include <stdio.h> #include <string.h> #define PANJANG 20 char nama1[PANJANG] = "GATUTKACA"; char nama2[PANJANG] = "HANOMAN"; main() { char namax[PANJANG]; puts("SEMULA : "); printf("nama1 --> %s\n", nama1); printf("nama2 --> %s\n", nama2); strcpy(namax, nama1); strcpy(nama1, nama2); strcpy(nama2, namax); puts("KINI : "); printf("nama1 --> %s\n", nama1); printf("nama2 --> %s\n", nama2); }
8. Menukarkan isi 2 string dengan fasilitas pointer. /* Program : ptrnama.c Menukarkan isi 2 string dengan fasilitas pointer */ #include <stdio.h> #include <string.h> char *nama1 = "GATUTKACA"; char *nama2 = "HANOMAN"; main() { char *namax; puts("SEMULA : "); printf("nama1 --> %s\n", /* nama1 adl pointer yg printf("nama2 --> %s\n", /* nama2 adl pointer yg
nama1); menunjuk ke string GATUTKACA*/ nama2); menunjuk ke string HANOMAN*/
47
namax = nama1; nama1 = nama2; nama2 = namax; puts("KINI : "); printf("nama1 --> %s\n", nama1); printf("nama2 --> %s\n", nama2); }
9. Pointer yang menunjuk ke pointer yang lain. /* Program : ppointer1.c */ #include <stdio.h> main() { int a, *b, **c; a = 155; b = &a; c = &b; printf("Nilai a = %d atau %d printf("b = %p = alamat a di printf("c = %p = alamat b di printf("alamat c di memori =
atau %d\n", a, *b, **c); memori\n", b); memori\n", c); %p\n", &c);
}
10. Pointer yang menunjuk ke pointer yang lain. /* Program : ppointer2.c */ #include <stdio.h> main() { int var_x = 273; int *ptr1; int **ptr2; ptr1 = &var_x; ptr2 = &ptr1; printf("Nilai var_x = *ptr1 = %d\n", *ptr1); printf("Nilai var_x = **ptr2 = %d\n\n", **ptr2); printf("ptr1 = &var_x = %p\n", ptr1); printf("ptr2 = &ptr1 = %p\n", ptr2); printf(" &ptr2 = %p\n", &ptr2); }
48
11. Fungsi dengan argumen berupa pointer. /* Program : argptr.c */ #include <stdio.h> void naikkan_nilai(int *x, int *y); main() { int a = 3; int b = 7; printf("SEMULA : a = %d
b = %d\n", a, b);
naikkan_nilai(&a, &b); printf("KINI : a = %d
b = %d\n", a, b);
} void naikkan_nilai(int *x, int *y) { *x = *x + 2; *y = *y + 2; }
12. Fungsi dengan keluaran berupa pointer yang menunjuk string. /* Program : pbulan.c */ #include <stdio.h> char *nama_bulan(int n); main() { int bl; printf("Bulan 1..12 : "); scanf("%d", &bl); printf("Bulan ke-%d adalah %s\n", bl, nama_bulan(bl)); }
49
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]); }
C. SOAL Perkirakan hasil eksekusi dari program-program di bawah ini : 1. /* Program : lat1.c */ #include <stdio.h> main() { int z = 20, s = 30; int *pz, *ps; pz = &z; ps = &s; *pz += *ps; printf("z = %d\n", z); printf("s = %d\n", s); }
50
2. /* Program : ps1.c */ #include <stdio.h> main() { char c = 'Q'; char *char_pointer = &c; printf("%c %c\n", c, *char_pointer); c = '/'; printf("%c %c\n", c, *char_pointer); *char_pointer = '('; printf("%c %c\n", c, *char_pointer); }
3. /* Program : ps2.c */ #include <stdio.h> main() { int i1, i2, *p1, *p2; i1 p1 i2 p2
= = = =
5; &i1; *p1 / 2 + 10; p1;
printf("i1 = %d, i2 = %d, *p1 = %d, *p2 = %d\n", i1, i2, *p1,*p2); }
4.
/* Program : pstring1.c */ #include <stdio.h> main() { char *text_pointer = "Good morning!"; while(*text_pointer != '\0') { printf("%c", *text_pointer); text_pointer++; }; printf("\n\n"); }
51