Matakuliah Tahun Versi : H0112 – Pemrograman Bahasa Tingkat Tinggi : 2005/2006 : <<versi/revisi>> Pertemuan 3 Variabel/Dinamik Pointer 1 Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : • Menerangkan perbedaan pengertian konstant pointer dengan pengertian variabel pointer 2 Outline Materi • Alokasi Memori Dinamis (Dynamic Memory Allocation) – Variabel Pointer • Pointer Aritmatika I, II • Const dan pointer • Tugas: Gaussian Elimination 3 Dynamic Memory Allocation • Use malloc() and sizeof() for dynamically allocating memory int *a = (int*) malloc(k * sizeof(int)) Don’t: int *b = (int*) malloc(k * 4) // not portable • malloc() returns generic pointer (void *), thus typecast it to (int *) • Free dynamically allocated memory with free() free(a); 4 Pointer Arithmetic I • Use pointer arithmetic to access sequence of data cells • int a[4], *b = a; b+i points to (i+1)th element of a a[0] b • a[1] b+1 a[2] b+2 a[3] b+3 *(b+n) is the same as a[n] 5 Pointer Arithmetic II • Note: b+3 does not mean adding 3 to b, rather adding 3 times the size of the data cell to b • Subtraction: inverse to adding int *b = &a[3]; b-1 points to a[2] • Walking through array int sumArray(int *a, int size) { int i = 0, sum = 0; while (i<size) { sum += *a++; i++;} return sum; } 6 Const dan pointer • Apa perbedaan antara const *p dengan * const p? – “const” adalah adjektif yang mendeskripsikan istilah berikut: const * p * const p 7 Const dan pointer • const *p – Apa yang ditunjuk oleh pointer adalah konstanta • Sehingga nilai *p tidak dapat diubah void main (void) { int a = 3; 100 3 p a int const * p; p = &a; (*p) ++; a++; p++; warning: increment of read-only location printf( “%d”, p); } 8 Const dan pointer • * const p – Isi pointer (alamat) adalah konstanta • Sehingga pointer tidak dapat menunjuk ke variabel lain. void main (void) { int a = 3; 100 3 p a int const * p; p = &a; (*p) ++; warning:assignment of read-only ‘p’ a++; p++; warning: increment of read-only variabel ‘p’ printf( “%d”, p); } 9 Topik Minggu Depan • Modularitas • Tugas 1: Observasi program berikut ini (slide berikutnya) • Tugas 2: (Kompleks) Observasi pada program “gaussian elemination” – buku pustaka no 2, khususnya pada penerapan “dynamic memory allocation” (Applied C: An Introduction and moreChapter 19:Dynamic Arrays). 10 Example of pointers, malloc, free • • #include <stdio.h> #include <stdlib.h> • • • • • • • • • • • • void main() { int cost = 5, i; int* cost_ptr; cost_ptr = &cost; /*Let cost_ptr point to "cost“ */ printf("Pointer = %d. Dereference = %d\n", cost_ptr, *cost_ptr); cost_ptr = (int*) malloc( 10 * sizeof(int)); for (i = 0; i < 10; i++) { cost_ptr [i] = i*2; /* cost_ptr can be used as an array variable*/ printf("value %d: %d\t", i, cost_ptr[i]); • /* You can also explicitly use the memory location of ith element (can be dangerous).*/ • • • • • • *(cost_ptr + sizeof(int) * i) = 2*i ; printf("value %d: %d\n", i, *(cost_ptr + sizeof(int) * i)); } /* Free the allocated mormory if you don't use it in the future */ free( cost_ptr); } 11 • Tugas 3: – Suatu keypad matrix 4x4 memerlukan driver untuk menentukan tombol mana yang ditekan. Baca (buku pustaka no 2 hal 66) dan cobalah merancang program untuk keypad matrix 4x4 tersebut! 12