0% menganggap dokumen ini bermanfaat (0 suara)
265 tayangan16 halaman

Konsep Dasar Variabel Pointer

Variabel pointer berisi alamat dari variabel lain. Pointer dapat menunjuk variabel, array, atau string. Pointer digunakan untuk mengakses dan mengubah isi variabel secara tidak langsung. Hubungan antara pointer dan array erat karena array diterjemahkan sebagai pointer.

Diunggah oleh

widya uzumaki s
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
265 tayangan16 halaman

Konsep Dasar Variabel Pointer

Variabel pointer berisi alamat dari variabel lain. Pointer dapat menunjuk variabel, array, atau string. Pointer digunakan untuk mengakses dan mengubah isi variabel secara tidak langsung. Hubungan antara pointer dan array erat karena array diterjemahkan sebagai pointer.

Diunggah oleh

widya uzumaki s
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd

LAPORAN RESMI DASAR PEMOGRAMAN

LAPORAN RESMI DASAR POINTER

Ke - 11
Widad Alfiyah Zayyan
1 D4 Telekomunikasi A

2220600013
Moch. Zen Samsono Hadi, ST., [Link].,Ph.D

29 Desember 2020

Praktikum Dasar Programming 1 100


Mike Yuliana-PENS ITS
PRAKTIKUM 11
POINTER 1

A. Tujuan
1. Menjelaskan tentang konsep dari variabel pointer
2. Menjelaskan tentang pointer array
3. Menjelaskan tentang pointer string

B. DASAR TEORI
Konsep Dasar Pointer
Variabel pointer sering dikatakan sebagai variabel yang menunjuk ke obyek lain.
Pada kenyataan yang sebenarnya, variabel pointer berisi alamat dari suatu obyek lain (yaitu
obyek yang dikatakan ditunjuk oleh pointer). Sebagai contoh, px adalah variabel pointer
dan x adalah variabel yang ditunjuk oleh px. Kalau x berada pada alamat memori (alamat
awal) 1000, maka px akan berisi 1000. Sebagaimana diilustrasikan pada gambar 13.1 di
bawah ini
px
zzzz 1000

Address

?
1000
X
Gambar 13.1 Variabel pointer px menunjuk ke variabel x

Mendeklarasikan Variabel Pointer


Suatu variabel pointer dideklarasikan dengan bentuk sebagai berikut :

tipe *nama_variabel

dengan tipe dapat berupa sembarang tipe yang sudah dibahas pada bab-bab sebelumnya,
maupun bab-bab berikutnya. Adapun nama_variabel adalah nama dari variabel pointer.

Praktikum Dasar Programming 1 101


Mike Yuliana-PENS ITS
Sebagai contoh :

int px; / *contoh 1 */


char *pch1, *pch2; / *contoh 2 */

Contoh pertama menyatakan bahwa px adalah variabel pointer yang menunjuk ke suatu
data bertipe int, sedangkan contoh kedua masing pch1 dan pch2 adalah variabel pointer
yang menunjuk ke data bertipe char.

menyatakan variabel
pointer

char *pch1, *pch2; tanda akhir pernyataan deklarasi

nama variabel pointer


tipe data yang ditunjuk
oleh variabel pointer

Gambar 13.2 Ilustrasi pendeklarasian variabel pointer

Mengatur Pointer agar Menunjuk ke Variabel Lain


Agar suatu pointer menunjuk ke variabel lain, mula-mula pointer harus diisi dengan
alamat dari variabel yang akan ditunjuk. Untuk menyatakan alamat dari suatu variabel,
operator & (operator alamat, bersifat unary) bisa dipergunakan, dengan menempatkannya
di depan nama variabel. Sebagai contoh, bila x dideklarasikan sebagai variabel bertipe int,
maka
&x

berarti “alamat dari variabel x”. Adapun contoh pemberian alamat x ke suatu variabel
pointer px (yang dideklarasikan sebagai pointer yang menunjuk ke data bertipe int) yaitu :
px = &x;

Pernyataan di atas berarti bahwa px diberi nilai berupa alamat dari variabel x. Setelah
pernyataan tersebut dieksekusi barulah dapat dikatakan bahwa px menunjuk ke variabel x.

Mengakses Isi Suatu Variabel Melalui Pointer


Jika suatu variabel sudah ditunjuk oleh pointer, variabel yang ditunjuk oleh pointer

tersebut dapat diakses melalui variabel itu sendiri (pengaksesan langsung) ataupun melalui

Praktikum Dasar Programming 1 102


Mike Yuliana-PENS ITS
pointer (pengaksesan tak langsung). Pengaksesan tak langsung dilakukan dengan

menggunakan operator indirection (tak langsung) berupa simbol * (bersifat unary).

Contoh penerapan operator * yaitu :

*px

yang menyatakan “isi atau nilai variabel/data yang ditunjuk oleh pointer px” . Sebagai
contoh jika y bertipe int, maka sesudah dua pernyataan berikut

px = &x;
y = *px;

y akan berisi nilai yang sama dengan nilai x.

Mengakses dan Mengubah isi Suatu Variabel Pointer


Contoh berikut memberikan gambaran tentang pengubahan isi suatu variabel secara
tak langsung (yaitu melalui pointer). Mula-mula pd dideklarasikan sebagai pointer yang
menunjuk ke suatu data bertipe float dan d sebagai variabel bertipe float. Selanjutnya

d = 54.5;

digunakan untuk mengisikan nilai 54,5 secara langsung ke variabel d. Adapun

pd = &d;

digunakan untuk memberikan alamat dari d ke pd. Dengan demikian pd menunjuk ke


variabel d. Sedangkan pernyataan berikutnya

*pd = *pd + 10; (atau: *pd += 10; )

merupakan instruksi untuk mengubah nilai variabel d secara tak langsung. Perintah di atas
berarti “jumlahkan yang ditunjuk pd dengan 10 kemudian berikan ke yang ditunjuk oleh
pd”, atau identik dengan pernyataan

d = d + 10;

Akan tetapi, seandainya tidak ada instruksi

pd = &d;

Praktikum Dasar Programming 1 102


Mike Yuliana-PENS ITS
maka pernyataan

*pd = *pd + 10;

tidaklah sama dengan

d = d + 10;

Pointer dan Array


Hubungan antara pointer dan array pada C sangatlah erat. Sebab sesungguhnya

array secara internal akan diterjemahkan dalam bentuk pointer. Pembahasan berikut akan

memberikan gambaran hubungan antara pointer dan array. Misalnya dideklarasikan di

dalam suatu fungsi

int tgl_lahir[3] = { 01, 09, 64 };

dan

int *ptgl;

Kemudian diberikan instruksi

ptgl = &tgl_lahir[0];

maka ptgl akan berisi alamat dari elemen array tgl_lahir yang berindeks nol. Instruksi di
atas bisa juga ditulis menjadi

ptgl = tgl_lahir;

sebab nama array tanpa tanda kurung menyatakan alamat awal dari array. Sesudah
penugasan seperti di atas,

*ptgl

dengan sendirinya menyatakan elemen pertama (berindeks sama dengan nol) dari array
tgl_lahir.

Praktikum Dasar Programming 1 103


Mike Yuliana-PENS ITS
Kesimpulan
• Tipe variabel pointer adalah tipe variabel yang berisi alamat dari variabel yang
sebenarnya.
• Tipe variabel pointer harus sama dengan tipe variabel yang ditunjuk.
• Hubungan antara pointer dan array pada C sangatlah erat, sebab sesungguhnya array
secara internal akan diterjemahkan dalam bentuk pointer
• Variabel pointer bisa berupa string, array atau tipe variabel yang lainnya.

C. TUGAS PENDAHULUAN
1. Buat program untuk menampilkan sebaris string seperti contoh berikut ;
“Selamat Pagi“ menggunakan variable pointer (pointer to string).

Output

2. Buat potongan program untuk mencetak huruf ketiga ( L ) dari kata :


“P O L I T E K N I K “ dengan menggunakan variabel pointer

Praktikum Dasar Programming 1 104


Mike Yuliana-PENS ITS
D. PERCOBAAN
Untuk setiap program di bawah ini,
- gambarkan ilustrasi alokasi memori dari setiap baris pernyataan yang diproses
- perkirakan hasil eksekusinya,
1. #include <stdio.h>

main()
{
int x = 3, y = 4;
int *ip;

ip = &x;
y = *ip;
x = 10;
*ip = 3;

printf(“x = %d, y = %d”, x, y);

Ilustrasi alokasi memori

Address Value
0x7ffdb4015ce4 X = 3 → 10 → 3
0x3 Y=4→3
0x7ffdb4015ce0 *Ip = 3

Perkiraan Hasil Eksekusi


x=3,y=3

Praktikum Dasar Programming 1 105


Mike Yuliana-PENS ITS
2. #include
<stdio.h>
main()
{
int count = 16, sum = 17, *x, *y;

x = &sum;
*x = 27;
y = x;
x = &count;
*x = count;
sum = *x / 2 * 3;

printf("count = %d, sum = %d, *x = %d, *y =


%d\n",count,sum,*x,*y);
}
Ilustrasi alokasi memori
Address Value
0x10 Count = 16
0x18 Sum = 17→16 → 24
0x7ffd65a9f628 *x = 27 → 16

0x7ffd65a9f630 *y = 16 → 24

Perkiraan Hasil Eksekusi


count = 16 , sum = 24, *x = 16 , *y = 24

3. #include <stdio.h>

int r, q = 8;

int go_crazy(int *, int *);

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;

Praktikum Dasar Programming 1 106


Mike Yuliana-PENS ITS
go_crazy(ptr1, ptr2);
printf("q = %d, r = %d, *ptr1 = %d, *ptr2 = %d\n",
q, r,*ptr1,*ptr2);
}

int go_crazy(int *p1, int *p2)


{
int x = 5;

r = 12;
*p2 = *p1 * 2;
p1 = &x;
return *p1 * 3;
}

Ilustrasi alokasi memori


Address Value
0x601048 r
0x601040 q = 8 → 16
0x7ffd9aca9360 *ptr1 = 8 → 16

0x7ffd9aca9368 *ptr2 = 8 → 16
X=5
r = 12 → 15
P1 = 1008

Perkiraan Hasil Eksekusi


q = 16, r = 15, *ptr1 = 16, *ptr2 = 16

Ilustrasi alokasi memori


Address Value
0x601048 r
0x601040 q = 8 → 12 → 24
0x7ffd9aca9360 *ptr1 = 8 → 12 → 24

0x7ffd9aca9368 *ptr2 = 8 → 12 → 24
X=5
r = 12
P1 = 1010

Perkiraan Hasil Eksekusi


q = 24, r = 12, *ptr1 = 12, *ptr2 = 24

Praktikum Dasar Programming 1 107


Mike Yuliana-PENS ITS
4. #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);
}

Ilustrasi alokasi memori


Address Value
0x7ffcd0a5d87c Var_x = 273
0x7ffcd0a5d880 Ptr1 = 273
0x7ffcd0a5d888 Ptr2 = ptr1 → 273

Perkiraan Hasil Eksekusi


Var_x = 273,
ptr1 & ptr2 = var_x

5. int array1[10], array2[10];


int *ip1, *ip2 = array2;
int *akhir = &array1[10];

for(ip1 = &array1[0]; ip1 < akhir; ip1++)


*ip2++ = *ip1;

Ilustrasi alokasi memori


Address Value
0x7ffdcbb3b728 ip1 = -877414552
0x7ffdcbb3b730 ip2 = -877414504

Praktikum Dasar Programming 1 108


Mike Yuliana-PENS ITS
Perkiraan Hasil Eksekusi
ip 1 = -877414552 , ip2 = -877414504

LAPORAN RESMI
a. Kumpulkan listing program, ilustrasi alokasi memorinya beserta hasil eksekusinya

Percobaan 1

Listing:

Ilustrasi alokasi memori:

Address Value
0x7ffdb4015ce4 X = 3 → 10 → 3
0x3 Y=4→3
0x7ffdb4015ce0 *Ip = 3

Hasil Eksekusi:

Praktikum Dasar Programming 1 109


Mike Yuliana-PENS ITS
Percobaan 2

Listing:

Ilustrasi alokasi memory:

Address Value
0x10 Count = 16
0x18 Sum = 17→16 → 24
0x7ffd65a9f628 *x = 27 → 16

0x7ffd65a9f630 *y = 16 → 24

Hasil eksekusi:

Praktikum Dasar Programming 1 110


Mike Yuliana-PENS ITS
Percobaan 3

Listing:

Ilustrasi alokasi memory:

Address Value
0x601048 r
0x601040 q = 8 → 16
0x7ffd9aca9360 *ptr1 = 8 → 16

0x7ffd9aca9368 *ptr2 = 8 → 16
X=5
r = 12 → 15
P1 = 1008

Address Value
0x601048 r
0x601040 q = 8 → 12 → 24
0x7ffd9aca9360 *ptr1 = 8 → 12 → 24

0x7ffd9aca9368 *ptr2 = 8 → 12 → 24
X=5
r = 12
P1 = 1010

Hasil Eksekusi:

Praktikum Dasar Programming 1 111


Mike Yuliana-PENS ITS
Percobaan 4

Listing:

Ilustrasi alokasi memory:

Address Value
0x7ffcd0a5d87c Var_x = 273
0x7ffcd0a5d880 Ptr1 = 273
0x7ffcd0a5d888 Ptr2 = ptr1 → 273

Hasil Eksekusi:

Praktikum Dasar Programming 1 112


Mike Yuliana-PENS ITS
Percobaan 5

Listing:

Ilustrasi alokasi memori:

Address Value
0x7ffdcbb3b728 ip1 = -877414552
0x7ffdcbb3b730 ip2 = -877414504

Hasil Eksekusi:

Praktikum Dasar Programming 1 113


Mike Yuliana-PENS ITS
ANALISIS

Pada praktikum kali ini, dilakukan 4 kali percobaan mengenai penggunaan pointer.
Pada percobaan nomor 1, nilai x = 3, y=4. Kemudian, pada baris ke-6 pada variabel ip
menunjuk alamat x. Selanjutnya, nilai x berubah menjadi 10 melalui perintah x = 10 pada
baris ke-8. Begitu pula nilai y yang ikut berubah menjadi 3 karena terdapat perintah *ip = 3
yang terhubung pada baris ke-7 dimana terdapat y = *ip, maka nilai y secara otomatis
berubah dan nilai x kembali ke nilai semula,yakni x = 3.
Pada percobaan nomor 2, count=16 dan sum= 17. Lalu variabel x menunjuk alamat
variabel sum. Kemudian, nilai dari variabel pointer x (*x) adalah 27, nilai y = x, yakni 27.
variabel x menunjuk alamat dari variabel count. Lalu, nilai *x berubah dari 27 menjadi 16
karena perintah *x = count yang mana count = 16. Nilai sum berubah menjadi 24 karena
terdapat perintah pada baris ke 12, yakni *x / 2 * 3 atau bisa kita tuliskan 16 / 2 x 3 = 24.
Pada percobaan nomor 3, nilai dari *ptr1 = 8 karena int *ptr1 = &q enunjuk alamat q
yang mana bernilai 8. Kemudian terjadi operasi bilangan dari *p2 = *p1 x 2 yang mana p1
menunjuk alamat q yang berinlai 8. Sehingga 8 x 2 = 16. *ptr1 = 8 16 begitu pula yang terjadi
dengan nilai *ptr2 = 8 kemudian menjadi 16. Nilai q juga menjadi 16. Lalu pada printf kedua.
Mulanya nilai pada r = 12 kemudian pada p1 menunjukkan alamat x yang bernilai 5. Dan
terjadi pengoperasian di return *p1*3 = 5x3 = 15 sehingga nilai r berubah menjadi 15.
Diketahui nilai r = 12. Nilai dari *ptr1 = 8 karena int *ptr1= &q menunjuk alamat q yang
mana bernilai 8. Kemudian terjadi operasi bilangan dari *p2 = *p1 x 2 yang mana p1
menunjuk alamat q yang berinlai 12. Sehingga 12 x 2 = 24. *ptr1 = 12 begitu pula yang
terjadi dengan nilai *ptr2 = 12 kemudian menjadi 24. Nilai q juga menjadi 24.
Percobaan nomor 4, int *ptr1, int *ptr2 . Artinya int *ptr2 menunjuk nilai dari *ptr1,
sementara nilai dari *ptr1 sama dengan var_x. Maka dari itu ketiga nilai variabel tersebut
sama, yaitu 273. ptr1 menunjuk alamat dari var_x yang ditandai dengan penggunaan
ampersand, ketika di cetak akan ditampilkan alamat var_x. Pada baris selanjutnya atau baris
ke-11, ptr2 menunjuk alamat ptr1, maka akan ditampilkan alamat dari ptr1, yaang
diasumsikan 1002. Pada baris ke 12, terdapat printf &ptr2 untuk memanggil alamat dari
variabelnya sendiri, maka akan ditampilkan alamat dari variabel ptr 2. Dengan begitu
pointer dapat menunjuk pointer lain, dengan cara mendeklarasikan variabel pointer terlebih
dahulu.
Pada percobaan nomor 5 nilai yang keluar dari aaray1 maupun array2 nilainya tidak
diinputkan sejak awal. Akan tetapi disini terjadi proses looping sehingga komputer
memberikan nilai secara acak agar program bisa berjalan.

KESIMPULAN
Dengan dilakukannya percobaan kali ini, dapat disimpulkan bahwa kegunaan pointer adalah
sebagai modifikasi saat kita ingin mengolah data/variable menggunakan jalan lain. Sehingga
alur yang digunakan tidak hanya menggunakan fungsi/program yang itu-itu saja.

Praktikum Dasar Programming 1 114


Mike Yuliana-PENS ITS

Anda mungkin juga menyukai