Pertemuan 3 Variabel/Dinamik Pointer Matakuliah : H0112 – Pemrograman Bahasa Tingkat Tinggi Tahun : 2005/2006 Versi : <<versi/revisi>> Pertemuan 3 Variabel/Dinamik Pointer
Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : Menerangkan perbedaan pengertian konstant pointer dengan pengertian variabel pointer
Alokasi Memori Dinamis (Dynamic Memory Allocation) – Variabel Pointer Outline Materi Alokasi Memori Dinamis (Dynamic Memory Allocation) – Variabel Pointer Pointer Aritmatika I, II Const dan pointer Tugas: Gaussian Elimination
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);
Use pointer arithmetic to access sequence of data cells 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 *(b+n) is the same as a[n] a[0] a[1] a[2] a[3] b b+1 b+2 b+3
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; }
const * p * const p Apa perbedaan antara const *p dengan * const p? Const dan pointer Apa perbedaan antara const *p dengan * const p? “const” adalah adjektif yang mendeskripsikan istilah berikut: const * p * const p
const *p Const dan pointer Apa yang ditunjuk oleh pointer adalah konstanta Sehingga nilai *p tidak dapat diubah void main (void) { int a = 3; int const * p; p = &a; (*p) ++; a++; p++; printf( “%d”, p); } 100 3 p a warning: increment of read-only location
* const p Const dan pointer Isi pointer (alamat) adalah konstanta p a Sehingga pointer tidak dapat menunjuk ke variabel lain. void main (void) { int a = 3; int const * p; p = &a; (*p) ++; a++; p++; printf( “%d”, p); } 100 3 p a warning:assignment of read-only ‘p’ warning: increment of read-only variabel ‘p’
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 more-Chapter 19:Dynamic Arrays).
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);
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!