– Pemrograman Bahasa Tingkat Tinggi Matakuliah : H0112 Tahun

advertisement
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
Download