100 likes | 354 Views
Pointer. Outline. Konsep pointer dalam bahasa C++ Variabel static dan dynamic Operator ‘ .’ dan ‘->’ Operator new dan delete, konstanta NULL Contoh program. POINTER UNTUK FUNCTION. C++ memperbolehkan operasi dengan pointer pada function.
E N D
Pointer Memory Dinamic
Outline • Konsep pointer dalam bahasa C++ • Variabel static dan dynamic • Operator ‘ .’ dan ‘->’ • Operator new dan delete, konstanta NULL • Contoh program Memory Dinamic
POINTER UNTUK FUNCTION • C++ memperbolehkan operasi dengan pointer pada function. • Kegunaan yang utama adalah untuk memberikan satu function sebagai parameter untuk function lainnya. • Deklarasi pointer untuk function sama seperti prototype function kecuali nama function dituliskan diantara tanda kurung () dan operator asterisk (*) diberikan sebelum nama. • contoh : // pointer to functions #include <iostream.h> int addition (int a, int b) { return (a+b); } int subtraction (int a, int b) { return (a-b); } int (*minus) (int,int) = subtraction; int operation (int x, int y, int (*functocall)(int,int)) { int g; g = (*functocall)(x,y); return (g); } int main ( ) { int m,n; m = operation (7, 5, addition); n = operation (20, m, minus); cout <<n; return 0; } • Output : 8 Memory Dinamic
DYNAMIC MEMORY • OPERATOR new dan new[ ] • Untuk meminta dynamic memory, digunakan operator new. Pernyataan new diikuti dengan tipe data dan jumlah elemen yang dibutuhkan didalam kurung siku []. • Syntax : pointer = new type atau pointer = new type [elements] • Bentuk pertama digunakan untuk meminta memory yang digunakan untuk elemen tunggal. • Bentuk kedua untuk meminta sekumpulan(array) elemen. Contoh : int * bobby; bobby = new int [5]; • Contoh diatas akan menetapkan ruang untuk 5 elemen bertipe int dalam heap dan memiliki pointer yang menunjuk ke tempat paling awal. • Dynamic memory pada umumnya diatur oleh operating system, dan pada multitask interfaces dapat digunakan bersama beberapa aplikasi, sangat memungkinkan memory habis terpakai. Jika hal ini terjadi, maka akan mengembalikan pointer null. Karena alasan tersebut, maka dianjurkan untuk melakukan pemeriksaan apakah pointer yang diberikan bernilai null. Contoh : int * bobby; bobby = new int [5]; if (bobby == NULL) { // error assigning memory. Take measures. }; Memory Dinamic
OPERATOR DELETE • Ketika memory yang tadi diminta sudah tidak digunakan lagi maka, memory tersebut harus dibebaskan agar dapat digunakan untuk permintaan dynamic memory lainnya. • Operator delete digunakan untuk mengatasi masalah ini, • syntax : delete pointer; atau delete [ ] pointer; • FUNGSI malloc • Merupakan function yang digunakan untuk menetapkan dynamic memory untuk pointer. • Syntax : void * malloc (size_t nbytes); • Dimana nbytes adalah jumlah dalam byte yang dibutuhkan untuk diberikan ke pointer. • Function akan mengembalikan pointer bertipe void*, karena itu harus diberikan perintah type cast nilai ke tipe pointer tujuan. • contoh : char * ronny; ronny = (char *) malloc (10); atau int * bobby;bobby = (int *) malloc (5 * sizeof(int)); Memory Dinamic
FUNGSI calloc • hampir sama dengan malloc dalam operasinya, perbedaan utamanya adalah prototype : void * calloc (size_t nelements, size_t size); • Memerlukan 2 buah parameter, elemen pertama adalah jumlah elemen yang diigunakan dan parameter yang kedua adalah ukuran dalam byte untuk setiap elemen. int * bobby; bobby = (int *) calloc (5, sizeof(int)); • FUNGSI realloc • Merubah ukuran dari blok memory yang telah ditetapkan sebelumnya. void * realloc (void * pointer, size_t size); • parameter pointer menerima pointer ke blok memory yang telah ada atau null pointer, dan size menetapkan ukuran yang baru untuk blok memory yang diminta. • Function dapat merupak lokasi dari blok memory sehingga ukuran yang baru dapat terpenuhi dan isi dari memory yang lama tidak hilang. Memory Dinamic
FUNGSI free • Melepaskan blok dari dynamic memory yang sebelumnya ditetapkan dengan malloc, calloc atau realloc. • Syntax : void free (void * pointer); • STRUCT • Contoh : // example about structures struct movies_t { char title [50]; int year; } mine, yours; void printmovie (movies_t movie); int main (){ char buffer [50]; strcpy (mine.title, "2001 A Space Odyssey"); mine.year = 1968; cout << "Enter title: "; cin.getline (yours.title,50); cout << "Enter year: "; cin.getline (buffer,50); yours.year = atoi (buffer); cout << "My favourite movie is:\n "; printmovie (mine); cout << "And yours:\n "; printmovie (yours); return 0;} void printmovie (movies_t movie){ cout << movie.title; cout << " (" << movie.year << ")\n"; } Memory Dinamic
Output : Enter title: Alien Enter year: 1979 My favourite movie is: 2001 A Space Odyssey (1968) And yours: Alien (1979) • POINTER PADA STRUCTURE • Sama seperti pada tipe lainnya, struktur juga dapat ditunjuk oleh pointer. Aturannya sama untuk setiap tipe data. • Pointer harus dideklarasikan sebagai pointer untuk struktur : struct movies_t { char title [50]; int year; };movies_t amovie;movies_t * pmovie; • amovie merupakan object dari tipe struct movies_t dan pmovie adalah pointer untuk menunjuk ke objek dari tipe struct movies_t. • deklarasi dibawah ini juga benar : pmovie = &amovie; Memory Dinamic
Referensi • Herbert Schildt, The Complete Reference C++, Fourth Edition, McGraw-Hill/Osborne • Antony Pranata, Pemrograman Borland C++, Andi Offset, Yogyakarta • Online Reading, www://cplusplus.com Memory Dinamic
Kesimpulan • Penggunaan memory dinamik dengan perintah malloc, calloc • Mengembalikan memory yang tidak digunakan setelah eksekusi dengan perintah free • Menggunakan struct sebagai parameter function dengan menggunakan pointer Memory Dinamic