Algoritma dan Pemrograman
4/13/2008
POINTER Algoritma dan Pemrograman Tahar Agastani Teknik Informatika UIN - 2008
Overview • Definisi Pointer • Operasi Pointer • Pointer dan Argumen Fungsi
Kuliah Minggu ke 11
1
Algoritma dan Pemrograman
4/13/2008
Definisi Pointer • Pointer adalah sebuah tipe data. • Anda bisa membuat variabel dari tipe ini sebagaimana anda lakukan pada tipe-tipe data lain. • Berisi sebuah alamat (address) memori. • Menunjuk (point) ke sebuah tipe data specifik. int *pointer1 = &x;
alamat x
int x=1;
0x2000
1 0x9060
Operasi Pointer Type objek; Deklarasi: Type *namaPtr; • Dua operator yang digunakan pada pointer : * (content of) dan & (address of). • namaPtr = &objek memberi nilai alamat objek ke namaPtr. • *namaPtr mengakses objek tersebut melalui pointer. • Pointer bisa berisi alamat dari pointer yang lain dan pointer disebut pointer-to-pointer • Deklarasi pointer to pointer sbb: type **ptr_to_ptr;
Kuliah Minggu ke 11
2
Algoritma dan Pemrograman
4/13/2008
Operasi Pointer (cont) Contoh: Contoh: Inisialisasi sebuah integer pointer ke data variable: int i, *ptr; ptr = &i; *ptr = 5; /* sama artinya dgn i=5 */ Pointer bisa dibandingkan nilainya dengan pointer lain: if (ptr1 < ptr2) ……
Pointer dan Argumen Fungsi
Kuliah Minggu ke 11
x:
1
y:
2
tukar
x:
2
y:
1
3
Algoritma dan Pemrograman
4/13/2008
#include <stdio.h>
Solusi 1 void TukarSalah(int a, int b) { int tmp; tmp = a; a = b; b = tmp; } int main() { int x = 1, y = 2; TukarSalah(x, y); printf(“%d %d\n”, x, y); }
#include <stdio.h>
Solusi 1 void TukarSalah(int a, int b) { int tmp; tmp = a; a = b; b = tmp; } int main() { int x = 1, y = 2; TukarSalah(x, y); printf(“%d %d\n”, x, y); }
Kuliah Minggu ke 11
x: 1
0x2000
2
0x2010
y:
4
Algoritma dan Pemrograman
4/13/2008
#include <stdio.h>
Solusi 1 void TukarSalah(int a, int b) { int tmp;
tmp: 0x2060
a: tmp = a; a = b; b = tmp;
1
0x2038
2
0x2040
b:
} int main() { int x = 1, y = 2; TukarSalah(x, y); printf(“%d %d\n”, x, y);
x: 1
0x2000
2
0x2010
y:
}
#include <stdio.h>
Solusi 1 void TukarSalah(int a, int b) { int tmp;
tmp:
1
0x2060
1
0x2038
2
0x2040
a: tmp = a; a = b; b = tmp;
b:
} int main() { int x = 1, y = 2; TukarSalah(x, y); printf(“%d %d\n”, x, y); }
Kuliah Minggu ke 11
x: 1
0x2000
2
0x2010
y:
5
Algoritma dan Pemrograman
4/13/2008
#include <stdio.h>
Solusi 1 void TukarSalah(int a, int b) { int tmp;
tmp:
1
0x2060
2
0x2038
2
0x2040
a: tmp = a; a = b; b = tmp;
b:
} int main() { int x = 1, y = 2; TukarSalah(x, y); printf(“%d %d\n”, x, y);
x: 1
0x2000
2
0x2010
y:
}
#include <stdio.h>
Solusi 1 void TukarSalah(int a, int b) { int tmp;
tmp:
1
0x2060
2
0x2038
1
0x2040
a: tmp = a; a = b; b = tmp;
b:
} int main() { int x = 1, y = 2; TukarSalah(x, y); printf(“%d %d\n”, x, y); }
Kuliah Minggu ke 11
x: 1
0x2000
2
0x2010
y:
6
Algoritma dan Pemrograman
4/13/2008
#include <stdio.h>
Solusi 1 void TukarSalah(int a, int b) { int tmp; tmp = a; a = b; b = tmp; } int main() { int x = 1, y = 2; TukarSalah(x, y); printf(“%d %d\n”, x, y); }
x: 1
0x2000
2
0x2010
y:
#include <stdio.h>
Solusi 2 void TukarBenar(int* a, int* b) { int tmp; tmp = *a; *a = *b; *b = tmp; } int main() { int x = 1, y = 2; TukarBenar(&x, &y); printf(“%d %d\n”, x, y); }
Kuliah Minggu ke 11
7
Algoritma dan Pemrograman
4/13/2008
#include <stdio.h>
Solusi 2 void TukarBenar(int* a, int* b) { int tmp; tmp = *a; *a = *b; *b = tmp; } int main() { int x = 1, y = 2; TukarBenar(&x, &y); printf(“%d %d\n”, x, y);
x: 1
0x2000
2
0x2010
y:
}
#include <stdio.h>
Solusi 2 void TukarBenar(int* a, int* b) { int tmp;
tmp: 0x2060
a: tmp = *a; *a = *b; *b = tmp;
addr of x
0x2038
addr of y
0x2040
b:
} int main() { int x = 1, y = 2; TukarBenar(&x, &y); printf(“%d %d\n”, x, y); }
Kuliah Minggu ke 11
x: 1
0x2000
2
0x2010
y:
8
Algoritma dan Pemrograman
4/13/2008
#include <stdio.h>
Solusi 2 void TukarBenar(int* a, int* b) { int tmp;
tmp:
1
0x2060
addr of x
0x2038
addr of y
0x2040
a: tmp = *a; *a = *b; *b = tmp;
b:
} int main() { int x = 1, y = 2; TukarBenar(&x, &y); printf(“%d %d\n”, x, y);
x: 1
0x2000
2
0x2010
y:
}
#include <stdio.h>
Solusi 2 void TukarBenar(int* a, int* b) { int tmp;
tmp:
1
0x2060
addr of x
0x2038
addr of y
0x2040
a: tmp = *a; *a = *b; *b = tmp;
b:
} int main() { int x = 1, y = 2; TukarBenar(&x, &y); printf(“%d %d\n”, x, y); }
Kuliah Minggu ke 11
x: 2
0x2000
2
0x2010
y:
9
Algoritma dan Pemrograman
4/13/2008
#include <stdio.h>
Solusi 2 void TukarBenar(int* a, int* b) { int tmp;
tmp:
1
0x2060
addr of x
0x2038
addr of y
0x2040
a: tmp = *a; *a = *b; *b = tmp;
b:
} int main() { int x = 1, y = 2; TukarBenar(&x, &y); printf(“%d %d\n”, x, y);
x: 2
0x2000
1
0x2010
y:
}
#include <stdio.h>
Solusi 2 void TukarBenar(int* a, int* b) { int tmp; tmp = *a; *a = *b; *b = tmp; } int main() { int x = 1, y = 2; TukarBenar(&x, &y); printf(“%d %d\n”, x, y); }
Kuliah Minggu ke 11
x: 2
0x2000
1
0x2010
y:
10
Algoritma dan Pemrograman
4/13/2008
Pointer dan Fungsi • Untuk memungkinkan sebuah fungsi mengakses dan mengubah sebuah objek. • Untuk structure besar bisa membuat lebih efisien. (dibahas di Pertemuan 13) • Gunakan specifier const bila mana sebuah konstanta dibutuhkan. (dibahas di Pertemuan 13)
Lain-lain Tentang Pointer • Anda bisa mencetak alamat yang disimpan dalam sebuah pointer dengan menggunakan conversion specifier %p Contoh:
printf(“%p”, numPtr);
scanf() perlu
mengetahui dimana menaruh nilai jadi membutuhkan alamat dari variabel tersebut dengan mengambil pointer sebagai parameter.
Contoh:
int i; scanf(“%d”, &i);
Kuliah Minggu ke 11
11
Algoritma dan Pemrograman
4/13/2008
Jadi Mengapa Pointer? • Untuk memodifikasi variabel dalam fungsi yang bukan global atau lokal terhadap fungsi tersebut. • Untuk menghemat ruang • Untuk menghemat waktu • Untuk menggunakan memori dinamis • Sering digunakan dalam linked structures
Latihan
Kuliah Minggu ke 11
12