• Tidak ada hasil yang ditemukan

Struktur Data (Data Structure) – IS 2313

N/A
N/A
Protected

Academic year: 2018

Membagikan "Struktur Data (Data Structure) – IS 2313"

Copied!
39
0
0

Teks penuh

(1)

Imam Rozali, S.T., M.T.

Struktur Data

(2)
(3)

Outline

KONSEP DASAR POINTER

Pendeklarasian Variabel Pointer

Mengatur Pointer Agar Menunjuk ke Variabel Lain

Operasi pada Pointer

Mengakses Isi Suatu Variabel Melalui Pointer

Tipe Variabel Pointer dan Tipe Obyek Yang Ditunjuk

Pointer dan Array

Array Dari Pointer

Inisialisasi Array Pointer

Pointer Menunjuk Pointer

Pointer dan Struct

Pointer dan Tipe Data String

Pointer Sebagai Parameter Fungsi

(4)

KONSEP DASAR POINTER

Pointer (variabel penunjuk) adalah suatu

variabel yang berisi alamat lokasi suatu memori tertentu.

Jadi isi dari variabel pointer merupakan alamat dari lokasi memori yang digunakan untuk

(5)
(6)

Jika variabel merupakan isi memori, dan untuk mengakses isi memori tersebut diperlukan

(7)

Pendeklarasian Variabel Pointer

type *nama_variabel;

int px; /* contoh1*/

char pch1, pch2;

(8)

Mengatur Pointer Agar

Menunjuk ke Variabel Lain

Agar suatu pointer menunjuk ke variabel yang lain, mula-mula pointer harus diisi dengan

alamat dari variabel yang akan ditunjuk. Untuk menyatakan alamat dari suatu variabel, dapat digunakan operator & (operator alamat, yang bersifat unaray), dengan cara menempatkan operator di depan nama variabel.

(9)

Adapun contoh pemberian alamat 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

(10)

Operasi pada Pointer

Operasi Penugasan

 Suatu variable pointer seperti halnya variable yang lain, juga bisa mengalami operasi penugasan. Nilai dari suatu variable pointer dapat disalin ke variable pointer yang lain. Operator (&) dalam kaitannya dengan pointer adalah operator yang

mengembalikan alamat memori dari operandnya.

Operasi Aritmatika

(11)

Operasi Penugasan

int y = 5; /*deklarasi variabel y*/

int *yPtr; /*deklarasi variabel pointer yPtr*/

(12)

#include <stdio.h>

printf (“Alamat dari i adalah %p\n”,ia); printf (“Nilai i adalah %d\n”,i);

printf (“Nilai dari pointer ia adalah %d\n”,*ia); *ia=50;

printf (“Nilai I sekarang adalah %d\n”,i); printf (“Alamat dari i adalah %p\n”,&i); return 0;

(13)

Operasi Aritmatika

 Asumsikan kita telah mendeklarasikan sebuah array float v[5], dan anggap elemen pertamanya berada pada lokasi 3000 di memori. Lalu kita deklarasikan sebuah variabel pointer *vPtr, ada dua cara untuk mengisi variabel pointer *vPtr dengan alamat dari elemen pertama array v, yaitu :

float *vPtr = v;

(14)

 Jika kita melakukan operasi aritmatika seperti:

dalam perhitungan aritmatika biasa, maka vPtr yang semula berisi 3000 menjadi 3000 + 2 = 3002, namun ini tidak berlaku pada pointer. Operasi aritmatika pada pointer di atas artinya adalah vPtr yang semula menunjuk pada v[0] sekarang menunjuk ke v[2].

 Karena vPtr menunjuk alamat memori dari variabel v yang bertipe float, maka vPtr sekarang berisi 3008 (3000 + 2 * 4).

(15)

#include <stdio.h> int main()

{

float nilai[i3]l, *petunuuk;

nilai[i0l = 220; nilai[i0l = 641; nilai[i0l = 53];

penunuuk = &nilai[i0l;

(16)

Mengakses Isi Suatu Variabel

Melalui Pointer

 Jika suatu variabel sudah ditunjuk oleh pointer, maka variabel

tersebut dapat diakses melalui variabel itu sendiri (disebut sebagai pengaksesan tak langsung), ataupun melalui pointer (disebut

pengaksesan langsung).

 Pengaksesan tak langsung dilakukan dengan menggunakan operator inderection berupa simbol * (bersifat unaray), seperti contoh berikut:

*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;

(17)

/* --- */ /* File program : Pointer.c */

/* Contoh pemakaian pointer */ /* --- */

#include <stdio.h> main()

{

int x,y; /* x dan y bertipe int */

int *px; /* px pointer yang menunuuk obyek bertipe int */ x = 87;

px = &x; /* px berisi alamat dari x */

y = *px; /* y berisi nilai yang ditunuuk px */ printf("Alamat x = %p\n", &x);

printf("Isi px = %p\n", px); printf("Isi x = %d\n", x);

printf("Nilai yang ditunuuk px = %d\n", *px); printf("Nilai y = %d\n", y);

(18)

Tipe Variabel Pointer dan Tipe

Obyek Yang Ditunjuk

Antara tipe pointer (sesuai dengan

pendeklarasian pointer) dan tipe obyek yang

akan ditunjuk oleh pointer haruslah sejenis. Jika misalnya pointer pu dimaksudkan untuk

menunjuk data bertipe int maka data yang akan ditunjuk oleh pointer pu juga harus bertipe int. Suatu kesalahan akan terjadi jika misalnya

(19)

Mengubah Isi Suatu Variabel

Melalui Pointer

Mula-mula pd dideklarasikan sebagai pointer yang menunjuk ke suatu data bertipe float dan d sebagai variabel bertipe float. Selanjutnya dengan ungkapan:

d = 54.6;

digunakan untuk mengisikan nilai 54.6 secara langsung ke variabel d.

Perintah : pd = &d;

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

Sedangkan pernyataan berikut:

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

merupakan instruksi untuk mengubah nilai variabel d secara tak langsung.

Perintah di atas berarti “jumlahkan isi variabel yang ditunjuk oleh pd

dengan 10 dan simpan hasilnya ke variabel tersebut”, atau identik dengan pernyataan:

(20)
(21)

Pointer dan Array

 Misalnya dalam suatu fungsi dideklarasikan:

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

 Kemudian diberikan pernyataan

ptgl = &tgl_lahir[0];

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

ptgl = tgl_lahir;

sebab nama array tanpa tanda kurung menyatakan alamat awal dari array.

 Sesudah penugasan seperti di atas, maka

*ptgl

(22)

/* --- */

/* File program : Pointer3].c */ /* Pointer yang menunuuk array */

/* --- */ printf("Nilai yang ditunuuk oleh ptgl = %d\n", *ptgl);

printf("nilai dari tgl_lahir[i0l = %d\n", tgl_lahir[i0l);

(23)

Jika ingin menampilkan seluruh elemen array tgl_lahir, maka dapat digunakan perintah

for(i=0; i<3]; i++)

printf(“%d%, tgl_lahir[iil);

ptgl = tgl_lahir;

for (i=0; i<3]; i++0

(24)

Secara umum operasi pointer dapat diterangkan sebagai berikut. Misalkan a adalah suatu array, dan pa adalah pointer yang menunjuk array a, maka

*(pa + i)

(25)

Jika pa dideklarasikan sebagai int *pa;

maka obyek dari pa adalah data int.

Cara lain dalam menampilkan isi suatu array yaitu dengan menaikkan isi variabel pointer dengan menggunakan operator ++.

*(ptgl + i)

(26)

Misalkan suatu instruksi: int *pa;

int a[3];

Sesudah pernyataan: pa = a;

(27)

Array Dari Pointer

Suatu array dapat digunakan untuk menyimpan sejumlah pointer. Misal pernyataan:

char *namahari[10];

(28)

Inisialisasi Array Pointer

Static char *namahari[i l = { “Senin”, “Selasa”,

“Rabu”,

“Kamis”, “Jum’at”, “Sabtu” ,

(29)

Pointer Menunjuk Pointer

(30)

/* --- */ /* File program : Ptrptr.c */

/* Contoh pointer menunjuk pointer */ /* --- */ /* Mengakses nilai var_x melalui ptr1 */

printf("Nilai var_x = %d\n", *ptr1);

/* Mengakses nilai var_x melalui ptr2 */ printf("Nilai var_x = %d\n", **ptr2);

(31)

Pointer dan Struct

(32)

Pointer dan Tipe Data String

String adalah sekumpulan karakter-karakter yang membentuk suatu larik atau array. Suatu string dapat diakses elemen-elemen

karakternya baik sebagai pointer ataupun sebagai larik.

char *P;

P =

(33)
(34)

#include <stdio.h> #include <string.h> #include <iostream.h> void main()

cout<<"Nilai variabel (P+"<<i<<") = '"<<*(P+i)<< "' berada pada alamat = ";printf("%p",(P+i));

cout<<endl; }

cout<<endl;

for (i=0; i<=7; i++) {

cout<<"Nilai variabel P["<<i<<"] = '"<<P[i]<< "' berada pada alamat = ";printf("%p", &P[i]); cout<<endl;

(35)
(36)

Pointer Sebagai Parameter

Fungsi

 Penerapan pointer sebagai parameter fungsi yaitu jika diinginkan agar nilai suatu variabel internal dapat diubah oleh fungsi yang dipanggil.

 Contoh pemanggilan fungsinya adalah : naikkan_nilai(&a, &b);

void naikkan_nilai (int *x, int *y) {

(37)

Pointer Sebagai Keluaran

Fungsi

(38)
(39)

/* --- */ /* File program : Ptrbulan.c */

/* Contoh fungsi dengan keluaran berupa */ /* pointer yang menunjuk string */

/* --- */ #include <stdio.h>

char *nama_bulan(int n); main()

{

int bl;

printf("Bulan (1 .. 12): "); scanf("%d", &bl);

printf("%s\n", nama_bulan(bl)); }

Referensi

Dokumen terkait

Likuiditas ( liquidity ), profitabilitas ( profitability ), leverage, produktivitas ( productivity ), pertumbuhan perusahaan ( growth ), jaminan ( secure ), dan umur

Untuk tekanan darah sistolik hasil uji statistik yang dilakukan dengan mengunakan uji Rank Spearman diperoleh nilai p sebesar 0,346 (p&gt;0,05), maka H0 diterima

Konsultan pengawas bertanggung jawab penuh kepada Pemimpin Pekerjaan bahwa hasil pelaksanaan pekerjaan oleh Penyedia Jasa Pemborongan benar-benar sesuai ketentuan kontrak

Cirrus creased his brow, struggling to make sense of the words, and was just about to check the sphere round his neck, to see where Tierra del Fuego might be, when

That is right. Begin by identifying some interesting problem, one that is already solved, and then blatantly copy the solution. Copy the solution by typing it out yourself. Get

Dari hasil penelitian ini diharapkan dapat memberikan masukan kepada Unit Pelayanan Pajak dan Retribusi Daerah apakah perhitungan, pencatatan dan pelaporan Pajak

Kelompok I terdiri dari 2 varietas (Adira IV dan Adira I) dan 1 klon (BIC 369) berproduksi lebih tinggi dari klon lokal II baik pada lokasi Pleihari maupun KP Banjarbaru..

Kesimpulannya adalah sebagai berikut: Terdapat perbedaan antara auditor internal dan auditor eksternal mengenai pendeteksian tindakan kecurangan keuangan dan risiko