PERTEMUAN 02
Struktur Data – Fondasi
POINTER
sebagai Fondasi
Struktur Data
160 menit · 8 Bagian · 13 Slide
Dirancang secara spiral — bukan hanya untuk minggu ini, tetapi menyiapkan Linked List (M6–7) and Tree (M15). Bertahap, tidak overload.
01 / 13
Learning Flow
🧭 Struktur Besar
1
🔁 Memory Mindset
15 menit
2
🧠 Pointer Dasar
35 menit
3
🔄 Pass by Address
25 menit
4
🔢 Pointer & Array
20 menit
5
➕ Pointer Arithmetic
15 menit
6
🪞 Double Pointer
15 menit
7
🏗 Stack vs Heap
10 menit
8
🏁 Ringkasan
10 menit
02 / 13
Bagian 1 · Memory Mindset · 15 menit
Dari Variabel
ke Memori

Pemrograman dasar membuat kita fokus pada nilai.
Struktur data membuat kita fokus pada lokasi nilai.


Komputer tidak menyimpan "nama variabel" — yang disimpan adalah:

Alamat — di mana dalam memori nilai itu berada
Isi — nilai apa yang tersimpan di sana
Jika dua variabel menyimpan nilai sama, apakah mereka berada di tempat yang sama?
03 / 13
Bagian 1 · Memory Mindset
🖥 Visualisasi Memori

Setiap variabel menempati slot unik di memori:

0x1A04
10
int x
0x1A08
10
int y
x dan y punya nilai sama (10), tapi alamat berbeda
Alamat tidak bisa kita pilih — tapi bisa kita akses
04 / 13
Bagian 2 · Pointer Dasar · 35 menit
🧠 Definisi Pointer

Pointer adalah variabel yang menyimpan alamat memori.

int x  = 10;
int *p = &x;   // p menyimpan alamat x
0x1A04
10
int x
0x1A08
0x1A04
int *p
05 / 13
Bagian 2 · Pointer Dasar
4 Perspektif Penting
EkspresiMaknaContoh
xnilai langsung10
&xalamat x0x1A04
palamat di p0x1A04
*pisi alamat10
06 / 13
Bagian 2 · Pointer Dasar
⚠️ Kesalahan Umum
⛔ Berbahaya
Pointer belum diinisialisasi (wild pointer).
⛔ Berbahaya
Dereference NULL (Segmentation Fault).
07 / 13
Bagian 3 · Pass by Address · 25 menit
🔄 Pass by Address

❌ VALUE

void f(int a) { a++; }

✅ ADDRESS

void f(int *a) { (*a)++; }
08 / 13
Bagian 4 · Pointer & Array
🔢 Pointer & Array
arr[i] ≡ *(arr + i)
int arr[3] = {10, 20, 30};
int *p = arr;
0x100
10
0x104
20
0x108
30
09 / 13
Bagian 5 · Arithmetic
➕ Pointer Arithmetic

Lompatan sesuai ukuran tipe.

int = 4 byte
char = 1 byte
p++; // maju ke elemen berikutnya
10 / 13
Bagian 6 · Double Pointer
🪞 Double Pointer
int x = 10;
int *p = &x;
int **pp = &p;
0x100
10
0x200
0x100
0x300
0x200
11 / 13
Bagian 7 · Memory Allocation
🏗 Stack vs Heap

STACK

Otomatis, statis.

HEAP

Manual (malloc/new), dinamis.

12 / 13
Bagian 8 · Kesimpulan
🏁 Ringkasan
Pointer menyimpan alamat.
*p mengakses nilai.
Fondasi utama untuk Struktur Data.