#include<stdio.h>

Slides:



Advertisements
Presentasi serupa
STRUKTUR DATA (5) Pointer dan Function
Advertisements

STRUKTUR Konsep Pemrograman.
Linked List Pembuatan Simpul Awal.
Algoritma dan Struktur Data Daniel Riano Kaparang.
PERTEMUAN VIII STRUKTUR LANJUT JURUSAN TELEKOMUNIKASI POLITEKNIK ELEKTRONIKA NEGERI SURABAYA Oleh : Muh. Zen S. Hadi, ST.
INSTRUKSI MASUKAN DAN KELUARAN
3 Variabel, Konstanta Tipe Data dan dalam Bahasa C/C++ Java dan Bab
7. 1 Bab 07 Menginput Nilai melalui Keyboard.
1 Pointer wijanarto. 2 Topik Introduction to Pointers Pointers dan Parameter Fungsi.
Algoritma & Struktur Data Pointer Evangs Mailoa.
PERTEMUAN IV STRING JURUSAN TELEKOMUNIKASI
Alokasi Memori Yuliana Setiowati.
BY YOHANA N Sumber Kepustakaan : yohananugraheni.files.wordpress.com/.../linked- lis... 1 LINKED LIST.
Penelusuran Bab 7 Pohon Biner 219.
Algoritma & Struktur Data Linked List Evangs Mailoa.
LINKED LIST by Yohana N.
STRUKTUR DATA Pointer dan Function
Algorithm and Data Structures.
Algoritma dan Struktur Data
Pertemuan ketujuh Struktur data st3telkom.ac.id
Operasi String Teknik Informatika Universitas Muhammadiyah Malang 2012 Pemrogramman Terstruktur.
Dasar Pemrograman Operasi String.
Struktur Data List Linear : Linked List (Single Linkedlist)
POINTER.
LINKED LIST.
Universitas Budi Luhur
Tipe Data By Serdiwansyah N. A..
INPUT DAN OUTPUT OLEH: SRI SUPATMI,S.KOM.
PERTEMUAN 3 KONSEP TIPE DATA, OPERATOR DAN IDENTIFIER
Bab & 7.3 NESTED LOOP Array 1 Dimensi 273.
Pertemuan 4 PROGRAMMING LANGUAGE.
KONSEP TIPE DATA, OPERATOR DAN IDENTIFIER
Algoritma dan Struktur Data
STACK 6.3 & 7.3 NESTED LOOP.
POINTER 6.3 & 7.3 NESTED LOOP.
06.3 Hari-6.
Bentuk standar dalam penulisan bahasa c/c++
FUNGSI, ARRAY, STRING, POINTER, DAN STRUCTURE
09.5 Hari-9.
09.4 Hari-9.
Elemen-elemen Dasar Pada Bahasa C++
02.1 Hari-2.
10.5 Nested loop 6.3 & 7.3 NESTED LOOP 255.
291.
Teori Pendukung Introduction to Algorithm 01.
Algoritma dan Struktur Data
~ PERTEMUAN 4 KONSEP TIPE DATA ~
Algoritma dan Struktur Data
Linked List 6.3 & 7.3 NESTED LOOP.
VARIABEL DAN TIPE DATA Erizal, S.Si, M.Kom Sistem Informasi
09.3 Hari-9.
Pertemuan Hari ke - 1 Sesi-1.
Algoritma dan Struktur Data
KONSEP TIPE DATA, OPERATOR DAN IDENTIFIER
Praktikum KBP 2 Array.
KONSEP DASAR STRUKTUR DATA
QUEUE (ANTRIAN) Queue atau antrian didefinisikan sebagai kumpulan dari obyek-obyek yang homogen dengan operasi penambahan elemen (Enqueue) dan pengambilan.
STACK (TUMPUKAN) Stack atau tumpukan didefinisikan sebagai kumpulan dari obyek-obyek yang homogen dengan operasi penambahan dan pengambilan elemen melalui.
LOGIKA DAN ALGORITMA Erizal, S.Si, M.Kom Sistem Informasi STTI Respati
Arithmetic Expression
Linear Doubly Linked List
ALGORITMA & STRUKTUR DATA C Programming
Variable Static & Linked List
Data dan Struktur Data.
Bab 05 Tipe Data dan Mengisi Variabel
Mencetak Nilai Konstanta
Soal-soal.
Bab 03 Variabel dan Tipe Data
SINGLE LINKED LIST (SLL)
Operator, Variabel, Konstanta, Tipe Data
Transcript presentasi:

#include<stdio.h> #include<stdlib.h> #include<string.h> struct STR { char NM[5]; int UMR; }; typedef STR S; void PRT( S *P) { printf(" Nama : %s \n", P->NM ); } int main() { S S1; strcpy( S1.NM , "Budi"); PRT( &S1 ); return 0;

#include<stdio.h> #include<stdlib.h> #include<string.h> struct STR { char NM[5]; int UMR; }; typedef STR S; void PRT( S *P) { printf(" Nama : %s \n", P->NM ); printf(" Umur : %i \n", P->UMR ); } void main() { S S1; strcpy( S1.NM , "Budi"); S1.UMR = 25; PRT( &S1 );

Error #include<stdio.h> #include<stdlib.h> #include<string.h> struct STR { char NM[5]; int UMR; }; typedef STR S; void PRT( S *P) { printf(" Nama : %s \n", P.NM ); printf(" Umur : %i \n", P->UMR ); } void main() { S S1; strcpy( S1.NM , "Budi"); S1.UMR = 25; PRT( &S1 ); Error

#include<stdio.h> #include<stdlib.h> #include<string.h> struct STR { char NM[5]; int UMR; }; typedef struct STR S; void PRT( S *P) { printf(" Nama : %s \n", P->NM ); printf(" Umur : %i \n", P->UMR ); } void main() { S S1; strcpy( S1.NM , "Budi"); S1.UMR = 25; PRT( &S1 ); #include<stdio.h> #include<stdlib.h> #include<string.h> struct STR { char NM[5]; int UMR; }; typedef STR S; void PRT( S *P) { printf(" Nama : %s \n", P->NM ); printf(" Umur : %i \n", P->UMR ); } void main() { S S1; strcpy( S1.NM , "Budi"); S1.UMR = 25; PRT( &S1 );

1.3. Structure. struct { struct Nametype { typedef struct { 23 A structure is a group of items in which each item is identified by its own identifier, each of which is known as a member of the structure. ( in other programming languages, a structure is called a “record” and a member is called a “field” ). Aaron M. Tenenbaum; Data Structures Using C and C++; Prentice Hall International Edition; 1996 Contoh membuat structure: a. struct { char First[10]; char Midinit; char Last[20]; } Sname, Ename; b. struct Nametype { char First[10]; char Midinit; char Last[20]; }; struct Nametype Sname, Ename; c. typedef struct { char First[10]; char Midinit; char Last[20]; } Nametype; Nametype Sname, Ename; 1). Sname dan Ename adalah structure variable. 2). First, Midinit, dan Last adalah member. 3). Nametype adalah structure tag. Catatan : Yang ditulis dengan huruf tebal ( struct, char, typedef ) adalah kata kunci (key word dalam bahasa C) yang tidak boleh diganti. Sedangkan yang lain adalah identifier yang namanya dapat dikarang sendiri. Ketiga contoh program yang menggunakan instruksi struct diatas, walupun cara menulisnya berbeda, tapi menghasilkan structure variabel : Sname dan Ename yang strukturnya sama, yang dapat diilustrasikan sebagai berikut : 0 1 2 3 4 5 6 7 8 9 Bila struktur ini digunakan sebagai Sname, maka elemen ini namanya Sname.First[9] First Midinit Sname.Last atau Ename.Last Last 0 1 2 3 4 5 6 7 8 9 10 11 13 15 17 19 Bila struktur ini digunakan sebagai Sname, maka elemen ini namanya Sname.Last[12] Atau cukup dengan : First Midinit Last Bahkan cukup dengan : First Midinit Last Tanpa memperlihatkan panjang tiap member. Yang diperlihatkan hanyalah struktur tersebut mempunyai 3 member 23 23

Untuk program ini, bila diinput : 24 Contoh Program-01 #include<stdio.h> void main() { struct { char F[10]; char M; char L[20]; } S, E; int i; scanf(“%s”,&S.F); scanf(“%s”,&S.M); scanf(“%s”,&S.L); for(i=0; S.F[i]; i++) printf(“%c”, S.F[i]); printf(“ %c. “, S.M); for (i=0; S.L[i]; i++) printf(“%c”, S.L[i]); } Untuk program ini, bila diinput : John F Kurniawan Maka akan mengisi structure variable S sebagai berikut : John F Kurniawan S F M L Dan mencetak : John F. Kurniawan Pada program ini dibuat dua struktur variabel yaitu S dan E. Yang diisi dan dicetak hanyalah S. ( E belum digunakan ). Perhatikan instruksi : for(i=0; S.F[i]; i++) printf(“%c”, S.F[i]); Instruksi ini maksudnya mencetak isi S.F karakter per karakter sampai ditemui karakter yang isinya NULL, atau 0 atau ‘\0’ karena isi S.F adalah sebagai berikut : Tercetak : John Instruksi loop yang menggunakan for() ini lebih mudah dimengerti bila ditulis dengan menggunakan while() sebagai pembentuk loop, seperti berikut ini : J o h n \0 NULL. Tanda akhir sebuah kata atau kalimat atau string hasil dari scanf() i=0; while(S.F[i]) { printf(“%c”, S.F[i]); i++; } Catatan : Instruksi : while(S.F[i]) Maksudnya : while(S.F[i] != 0 ) atau : while(S.F[i] != NULL) while(S.F[i] != ‘\0’) Seluruh instruksi ini dapat diganti dengan satu instruksi : printf(“%s”,S.F); Instruksi mencetak data yang dalam bentuk string, sebenarnya cukup dengan : printf(“%s”, xxx); Sehingga instruksi mencetak diatas dapat diganti dengan : Yang maksudnya : Selama belum ditemukan atau belum sampai pada tanda akhir sebuah perkataan atau kalimat, maka : ….. kerjakan loop. printf(“%s”, S.F ); printf(“ %c. “, S.M ); printf(“%s”, S.L ); Tercetak : John F Kurniawan Kecuali untuk S.M yang hanya satu karakter (bukan string) tidak dapat menggunakan format “%s” 24 24

25 Untuk menginput data yang bertipe string sebenarnya lebih baik dan lebih praktis bila menggunakan instruksi gets sebagai berikut : gets & puts gets(S.F); gets(&S.M); gets(S.L); Perhatikan : Untuk S.M, karena bukan string (bukan array) maka perlu ditambahkan tanda & untuk menyatakan alamat S.M Catatan : Untuk mencetak string, sebenarnya lebih praktis menggunakan instruksi puts( ) seperti puts(S.F); puts(S.M); dan puts(S.L);. Hanya saja instruksi puts, akan selalu pindah baris setelah selesai mencetak, sehingga nama orang akan tercetak dalam 3 baris., seperti : John F Kurniawan Dengan C++ : Untuk program ini, bila diinput : #include<iostream.h> void main() { struct { char F[10]; char M; char L[20]; } S, E; int i; cin >> S.F; cin >> S.M; cin >> S.L; cout << S.F; cout << “ “ << S.M << “. “; cout << S.L; } John F Kurniawan Maka akan mencetak : John F. Kurniawan Untuk mencetak isi S.F dapat juga dilakukan dengan mencetak karakter per karakter sebagai berikut : i=0; while(S.F[i]) { cout << S.F[i]; i++; } Contoh Program-02 Susun program untuk : Menyalin isi S ke E s Cara-1. E (sebelum) John F Kurniawan for(i=0;i<=9;i++) E.F[i] = S.F[i] E.M = S.M; for(i=0; i<=19; i++) E.L[i] = S.L[i]; Sebelum : s E (sesudah) Cara-2. John F Kurniawan John F Kurniawan Sesudah : strcpy(E.F, S.F); E.M = S.M; strcpy(E.L, S.L); S tetap, Tak berubah Catatan : Untuk dapat menggunakan instruksi strcpy (string copy ), diperlukan #include<string.h> 25 25

printf(“%s ”, Nm1.name.F ); printf(“%c. “, Nm1.name.M); 26 Contoh Program-03 Akan terbentuk structure variable yang dapat diilustrasikan sebagai berikut : #include<stdio.h> void main() { struct nametype { char F[10]; char M; char L[20]; }; struct addrtype { char street[30]; char city[25]; char state[15]; char zip[10]; struct Nmtype { struct nametype name; struct addrtype addr; struct Nmtype Nm1; Nm2; gets(Nm1.name.F); gets(&Nm1.name.M); gets(Nm1.name.L); gets(Nm1.addr.street); gets(Nm1.addr.city); gets(Nm1.addr.state); gets(Nm1.addr.zip); printf(“%s ”, Nm1.name.F ); printf(“%c. “, Nm1.name.M); printf(“%s”, Nm1.name.L ); printf(“\n”); printf(“%s ”, Nm1.addr.street ); printf(“%s ”, Nm1.addr.city ); printf(“%s ”, Nm1.addr.state ); printf(“%s ”, Nm1.addr.zip ); } atau : Nm1 F M L street city state zip name addr Nm1 name.F name.M name.L addr.street addr.city addr.state addr.zip atau : Nm1.name.F NM1.name.M Nm1.name.L Nm1.addr.street Nm1.addr.city Nm1.addr.state Nm1.addr.zip atau : Nm2 F M L street city state zip name addr Nm2 name.F name.M name.L addr.street addr.city addr.state addr.zip Bila diinputkan : John F Kurniawan Jl. Budhi IX No. B/18 Jakarta Barat Indonesia 11530 atau : Nm2.name.F NM2.name.M Nm2.name.L Nm2.addr.street Nm2.addr.city Nm2.addr.state Nm2.addr.zip Maka akan tercetak : John F. Kurniawan Jl. Budhi IX No. B/18 Jakarta Barat Indonesia 11530 26 26

printf("%p\n",&p[0].name.F[0]); printf("%p\n",&p[0]); 27 Contoh Program-04 P[0] #include<stdio.h> void main() {struct nametype { char F[10]; char M; char L[20]; }; struct person { struct nametype name; long int birthday[2]; struct nametype parents[2]; long int income; long int numchildren; char address[20]; char city[10]; char state[2]; struct person P[100]; - } name F char 10 byte M char 1 byte L char 20 byte birthday[0] long int 4 byte birthday[1] long int 4 byte parents[0] F char 10 byte M char 1 byte L char 20 byte parents[1] F char 10 byte M char 1 byte L char 20 byte income long int 4 byte numchildren long int 4 byte address char 20 byte city char 10 byte state char 2 byte Ada 100 buah area seperti ini dari P[0] sampai dengan P[99] Instruksi struct ini membentuk 100 buah stucture variable P , yang P[0] nya diilustrasikan seperti gambar yang diberikan. Berikut ini diberikan contoh instruksi untuk mencetak alamat (bukan isi) beberapa buah elemen tertentu atau bahkan nomor byte tertentu dalam sebuah elemen tertentu : printf("%p\n",&p[0].name.F[0]); printf("%p\n",&p[0]); printf("%p\n",&p[10]); printf("%p\n",&p[20].name.M); printf("%p\n",&p[20].income); printf("%p\n",&p[0].address[5]); printf("%p\n",&p[0].parents[1].L[10]); Pakai format “%p”, karena yang dicetak adalah alamatnya, bukan isinya Catatan: Dengan format “%p”, maka yang dicetak adalah alamat sebuah elemen atau alamat sebuah byte tertentu yang merupakan bagian dari sebuah string 27 27

28 1.4. Union. Dengan instruksi union, akan terbentuk sebuah structure dimana kita dapat memberikan banyak nama untuk suatu area yang sama. Masing-masing nama dapat mempunyai tipe data yang berbeda. Karena tipe datanya berbeda, maka sifat dan jumlah byte yang digunakannya pun berbeda. Contoh-01. #include<stdio.h> void main() { union { int N; char C[2]; } U; U.N = 16707; printf(“%i\n”, U.N); printf(“%c %c”, U.C[1], U.C[0] ); } dapat juga ditulis sebagai berikut : union { char C[2]; int N; } U; 2 byte Akan tercetak : 16707 A C U.N U.C[1] U.C[0] Keterangan : 1 byte 1 byte Variabel N bertipe int, sehingga menempati area 2 byte (16 bit). Area yang sama ditempati juga oleh array C bertipe char sebayak 2 elemen, C[0] dan C[1], masing-masing 1 byte (8 bit), yang kalau diilustrasikan dengan gambar, dapat digambarkan sebagai berikut : U.N U.C[0] atau : U.C[1] 16707 disimpan dalam U.N integer 2 byte (16 bit) representasi bit-bitnya adalah sebagai berikut : 0100 0001 0100 0011 = 16707 Contoh-02. #include<stdio.h> void main() {union { long int N; char C[4]; } U; int i; U.N = 1094929735; printf(“%li\n”, U.N); for(i=0,i<=3;i++) { printf(“%c ”, U.C[i] );} printf(“\n”); { printf(“%X ”, &U.C[i] );} } 8 bit ini ditempati oleh U.C[0], yang bila dicetak dengan format “%c”, akan tercetak huruf : ‘C’ Bila dicetak dengan “%i”, akan tercetak : 67 8 bit ini ditempati oleh U.C[1], yang bila dicetak dengan format “%c”, akan tercetak huruf : ‘A’. Bila dicetak dengan format “%i”, maka akan tercetak : 65 Nilai 1094929735 disimpan dalam long int 4 byte 0100 0001 0100 0011 0100 0001 0100 0011 U.C[3] U.C[2] U.C[1] U.C[0] A 21F1 C 21F0 M 21EF G 21EE Tercetak : 1094929735 G M C A 21EE 21EF 21F0 21F1 alamat tertinggi alamat terendah 28 28

29 Contoh-03. #include<stdio.h> void main() { union { int N; char C[2]; } U; U.C[1] = ‘A’; U.C[0] = ‘C’; printf(“%i\n”, U.N); } 0100 0001 0100 0011 ‘A’ ‘C’ 16 bit diatas bernilai 16707 bila dipandang sebagai numerik integer Yang dapat di- ‘union’ kan bukan hanya variabel tunggal tapi juga structured variable. Tercetak : 16707 Contoh-04. sample #include<stdio.h> #include<string.h> void main() { struct stint { long int f3, f4; }; struct stfloat { double f5, f6; struct samplex { long int f1; double f2; long int utype; union { struct stint x; struct stfloat y; } funion; struct samplex sample; printf("%p\n",&sample.f1); printf("%p\n",&sample.funion.x.f4); printf("%p\n",&sample.funion.y.f6); } 100 f1 4 byte 104 f2 8 byte 112 utype 4 byte 116 funion x f3 y f5 8 byte f4 f6 8 byte 132 Total : 32 byte Sample.funion.y.f6 alamat : 124 Sample.funion.x.f4 alamat : 120 Bila program ini dijalankan akan tercetak : 18EF:23E0 18EF:23F4 18EF:23F8 Alamat awal union Sample ini sama dengan alamat f1, yang dalam skala diatas dinyatakan dengan 100. Angka 100 ini bukan alamat sebenarnya, tapi hanya skala pembanding yang bersifat relatif terhadap alamat lainnya. Alamat sebenarnya dalam memory, setelah dicetak diketahui berada di H23E0. Alamat f4 terpisah atau berjarak sejauh (displacement) 20 byte dari alamat f1 (alamat f1 di 100, dan alamat f4 di 120, dapat dihitung sendiri secara manual). Decimal 20 bila dikonversi ke Hexadecimal menjadi 14. Sehingga alamat f4 adalah : H23E0 + H0014 = H23F4 . Alamat f6 terpisah 4 byte dari alamat f4, sehingga alamatnya = H23F4 + H0004 = H23F8 29 29

1.5. Variabel Statis dan Dinamis (Static and Dynamic variable). 30 1.5. Variabel Statis dan Dinamis (Static and Dynamic variable). Program ini menyiapkan variable dalam memory : Nama : A Tipe : int Kemudian mengisi variable A tersebut dengan nilai integer 25, sehingga biasanya diilustrasikan dengan gambar sebagai berikut : 1.5.1 Pointer dan Variable Statis 1.5.1.1 Pointer menunjuk variabel data Pandanglah beberapa contoh program berikut ini : Contoh-1. Menyiapkan sebuah variabel yang diberi nama : A , bertipe integer ( int ) int #include<stdio.h> void main() { int A; A = 25; printf(“%i”, A); } Diilustrasikan dengan gambar : 25 Mengisi variabel A dengan nilai : 25 A Kalau program ini dijalankan, akan tercetak : 25 Menyiapkan sebuah variabel , yang diberi nama P. Variabel ini bertipe pointer (selanjutnya disebut Poiter P) yang hanya dapat diisi dengan alamat suatu area. Area apa saja baik pakai nama maupun area tanpa nama asal tipenya int (integer) Tanda bintang ‘ * ‘ menyatakaan bahwa variabel tersebut bertipe pointer, Contoh-2. #include<stdio.h> void main() { int A; int *P; A = 25; P = &A; printf(“%i”, *P); } Menyimpan alamat variabel A dalam Pointer P, Sehingga dapat diilustrasikan dengan gambar berikut : Kedua variabel diatas, biasanya digambarkan sebagai berikut: 25 21CD Kalau program ini dijalankan, akan tercetak : 25 A P 25 A P printf(“%i”, *P), maksudnya mencetak isi variabel yang alamatnya sedang ditunjuk oleh Pointer P. Sedangkan variabel yang ditunjuk oleh Pointer P adalah variabel A. Jadi yang dicetak adalah isi variabel A. H21CD dalam memory Bila alamat variabel A berada di Hexa 21CD maka isi Pointer P = 21CD Untuk C++ Contoh-3. #include<iostream.h> void main() { int A, *P; A = 25; P = &A; cout << *P; } #include<stdio.h> void main() { int A, *P; P = &A; *P = 25; printf(“%i”, *P); } Program pada Contoh-3 ini, menghasilkan keadaan yang sama dengan program Contoh-2 yang digambarkan sebagai berikut : 25 A P Kalau program ini dijalankan, akan tercetak : 25 Kalau program ini dijalankan, akan tercetak : 25 *P = 25; Maksudnya : Variabel yang sedang ditunjuk oleh Pointer P diisi dengan 25. 30 30

#include<stdio.h> void main() { int A, *P; P = &A; 31 Contoh-4 #include<stdio.h> void main() { int A, *P; P = &A; printf(“%p\n”, &A); printf(“%p\n” , P); } Program ini mencetak alamat variabel A, dan juga mencetak isi pointer P, yang hasilnya : Catatan : 233F:21E4 233F disebut offset,dan 21E4 disebut segment Terlihat bahwa benar isi Pointer P adalah alamat variabel A. Contoh-5 Bila alamatnya dicetak dengan menggunakan format X (Hexadecimal) maka tercetak : Bila alamatnya dicetak dengan menggunakan format i, yaitu (%i), maka tercetak : #include<stdio.h> void main() { int A, *P; P = &A; printf(“%X\n”, &A); printf(“%X\n” , P); } 8676 21E4 8676 = 2*4096 + 1*256 + 14 * 16 + 4*1 8192 + 256 + 224 + 4 Pointer menunjuk pointer Akan menyebabkan Error PP = &A; 1.5.1.2 Pointer menunjuk Pointer Contoh-1. #include<stdio.h> void main() { int A, *P, **PP; A = 25; P = &A; PP = &P; printf("%i %i %i", A, *P, **PP); printf("\n"); printf("%X %X %X", &A, &P, &PP); printf("%X %X %X", A, P, PP); } 25 H2202 H247F A P PP &A= H2202 &P= H247F &PP= H21FE Ilustrasi kaitan antara 3 variabel diatas, dapat digambarkan sebagai berikut : Kalau program ini dijalankan, akan tercetak : PP H247F 25 25 25 2202 247F 21FE 19 2202 247F PP berisi alamat P Isi variabel Alamat variabel Isi variabel dalam Hexa H2202 P P berisi alamat A Catatan : Berbeda satu huruf, atau satu spasi saja dalam pengetikan program diatas, dapat menyebabkan perbedaan tata letak variabel, yang berarti alamatnyapun akan berbeda 25 A berisi nilai Integer 25 A printf(“%i”, *P); Mencetak isi variabel, yang alamat variabel tersebut ditunjuk oleh Ponter P Untuk contoh program diatas, yang dicetak adalah isi variabel A Mencetak isi variabel, yang alamat variabel tersebut ditunjuk oleh sebuah ponter, dimana pointer tersebut alamatnya ditunjuk oleh Pointer PP. Untuk contoh program diatas, yang dicetak adalah isi variabel A printf(“%i”, *PP); 31 31

C DELETE free(P); delete P; 1.5.2 Pointer dan Variable Dinamis 32 1.5.2.1 Pointer menunjuk variabel data dinamis tunggal Berikut ini diberikan contoh pembuatan dan penggunaan variabel dinamis. Disebut dinamis karena bisa disiapkan dan dapat dihapus pada saat program sedang dijalankan (running) Menyiapkan sebuah variabel , yang diberi nama P. Variabel ini bertipe pointer yang hanya dapat diisi dengan alamat suatu area. Area apa saja, baik pakai nama maupun area tanpa nama asal tipenya int (integer) Tanda bintang ‘ * ‘ menyatakaan bahwa variabel tersebut bertipe pointer, Contoh-1. #include<stdio.h> #include<stdlib.h> void main() { int *P; P = (int*) malloc(sizeof (int)); *P = 25; printf(“%i”, *P); } C Menyiapkan suatu area atau mengalokasikan memory (malloc) sebesar atau seukuran (sizeof) data integer ( int) , yaitu 2 Byte. Area ini tanpa nama. Alamat area ini disimpan dalam Pointer P. Bila program ini dijalankan akan tercetak : 25 Mencetak isi area yang alamatnya ada dalam Pointer P. Mengisi area yang alamatnya ada dalam Pointer P dengan nilai 25. Catatan : malloc() : (memory allocation) fungsi ini membutuhkan #include<stdlib.h> Ilustrasi : P Pointer P menunjuk suatu tempat (area) . Area tersebut tidak diberi nama 25 Untuk C++ #include<iostream.h> void main() { int *P; P = new int; *P = 25; cout << *P; } Area ini dapat dihapus atau dibuang atau didelete sehingga disebut variabel dinamis DELETE Pada C , dengan instruksi : Pada C++, untuk mendelete digunakan instruksi : free(P); delete P; Tercetak: 25 area yang ditunjuk oleh Pointer P dibebaskan penggunaannya, sehingga areanya dapat digunakan oleh oleh Sistem (Operating System) untuk keperluan lain bila dibutuhkan, Cukup sederhana untuk tujuan yang sama Secara fisik, isi area tersebut masih ‘ada’ (masih seperti sebelum di delete ). Selama area tersebut belum diisi atau ditempati oleh data yang baru, maka isinya masih belum berubah. 32 32

C++ 33 1.5.2.2 Pointer menunjuk struktur Yang bersifat dinamis, bukan saja sebuah variabel tunggal, tapi dapat juga merupakan suatu structure variable, sebagai contoh-contoh berikut ini : Contoh-1. Untuk membuat structure, dapat juga ditulis tanpa typedef sebagai berikut : #include<stdio.h> #include<stdlib.h> void main() { typedef struct node { int No; int Nilai; }; node *P, *Q; P = (node*) malloc(sizeof (node)); P->No = 25; P->Nilai = 87; printf(“%i %i”, P->No, P->Nilai); } 25 87 P No Nilai #include<stdio.h> #include<stdlib.h> void main() { struct node { int No; int Nilai; }; node *P, *Q; dan seterusnya C++ Bila program ini dijalankan akan tercetak : 25 87 #include<iostream.h> struct Node { int No; int Nilai; int N3; }; Node *P; void main() { P = new Node; P->N1 = 25; cout << P->N1; } Perhatikan : Pointer P dan Pointer Q, disiapkan untuk menunjuk (mencatat alamat) structure variable yang namanya node. Dalam struktur ini ada dua buah variabel int yaitu No dan Nilai. Untuk menujuk sebuah elemen, pointer menggunakan tanda panah. Tanda panah ini dibuat dengan dua karakter yaitu tanda kurang (-) dan tanda lebih besar (>) . atau { typedef struct node { int No; int Nilai; }; typedef struct node Simpul; Simpul *P, *Q; P = (node *) malloc(sizeof (node)); P->No = 25; P->Nilai = 87; printf(“%i %i”, P->No, P->Nilai); } Tercetak : 25 Simpul adalah nama lain atau alias dari nama node yang kedua-duanya menyatakan nama suatu structure yang sama. Menyebut Simpul sama saja dengan menyebut node, demikian juga sebaliknya. 25 87 P No Nilai { typedef struct node { int No; int Nilai; }; typedef struct node Simpul; Simpul *P, *Q; P = (Simpul *) malloc(sizeof (Simpul)); P->No = 25; P->Nilai = 87; printf(“%i %i”, P->No, P->Nilai); } Kedua program ini sama maksudnya dan sama sama akan mencetak : 25 87 25 87 P No Nilai 33 33

1.5.2.2 Pointer menunjuk Pointer struktur 34 1.5.2.2 Pointer menunjuk Pointer struktur Contoh-1. PP PP berisi alamat Pointer P #include<stdio.h> #include<stdlib.h> void main() { typedef struct node { int No; int Nilai; }; node *P, *Q, **P; P = (node *)malloc(sizeof (node)); P->No = 25; P->Nilai = 87; printf(“%i %i”, P->No, P->Nilai); PP = &P; printf(“\n%i”,(*PP)->Nilai); } P berisi alamat suatu area yang strukturnya dinyatakan oleh struktur node P No Nilai 25 87 Suatu tempat yang strukturnya dinyatakan oleh struktur node Bila program ini dijalankan akan tercetak : 25 87 87 Perhatikan: P->Nilai , atau (*PP)->Nilai sama-sama menunjuk area Nilai yang isinya 87 Bila ditulis : *PP->Nilai Akan menyebabkan error Contoh-1. Cetak( ) //0point2.cpp #include<stdio.h> #include<stdlib.h> typedef struct node { int No; int Nilai; }; void Cetak(node *Q, node **QQ) { printf("\n%i", Q->Nilai); printf("\n%i", (*QQ)->Nilai); } void main() { node *P; P = (node *)malloc(sizeof (node)); P->No = 25; P->Nilai = 87; Cetak(P, &P); Q QQ Sama dengan isi P Berisi alamat P H21CA H1000 Dalam fungsi Cetak Dikirim isi P Dikirim Alamat P (&P) main( ) P H21CA No Nilai Tercetak : 87 Misal alamat = H1000 25 87 Dicetak oleh fungsi Cetak() Sama sama mencetak isi Nilai Dalam fungsi utama (main) Misal alamat = H21CA 34 34