Bab 1 Pengantar C

# Mengenal Bahasa C

Pahami apa itu bahasa C, mengapa bahasa ini masih relevan, dan posisinya di antara bahasa pemrograman lain.

Buka →
# Sejarah dan Perkembangan C

Telusuri asal mula C di Bell Labs, perkembangannya dari BCPL dan B, hingga menjadi bahasa sistem Unix.

Buka →
# Kegunaan dan Ekosistem C

Pelajari bidang yang memakai C: sistem operasi, embedded, game engine, hingga library bahasa lain.

Buka →
# Compiler, Linker, dan Executable

Pahami perjalanan kode sumber .c menjadi program akhir: preprocessing, compile, assemble, dan link.

Buka →
# Standar Bahasa C

Kenali ISO/IEC 9899 dan versi standar C: C89, C99, C11, C17, dan C23.

Buka →
# Instalasi Compiler

Pasang GCC atau Clang di sistem operasi Anda dan verifikasi instalasi berhasil.

Buka →
# Menyiapkan Environment

Susun environment pengembangan C: PATH, editor, terminal, dan tools pendukung.

Buka →
# Menggunakan Terminal

Kuasai perintah terminal dasar untuk menavigasi direktori, mengompilasi, dan menjalankan program C.

Buka →
# Editor dan IDE

Bandingkan editor dan IDE populer untuk C: VS Code, CLion, Vim, dan Emacs.

Buka →
# Program C Pertama

Tulis, kompilasi, dan jalankan program hello world pertama Anda dalam bahasa C.

Buka →
# Proses Kompilasi

Bedah empat tahap kompilasi: preprocessing, compilation, assembly, dan linking.

Buka →
# Menjalankan Program

Pelajari cara menjalankan executable C, argumen command line, dan exit code.

Buka →
# Struktur Direktori Proyek

Rancang struktur direktori proyek C yang rapi: src, include, build, tests.

Buka →
# Debugging Awal

Pelajari debugging dasar dengan printf, gdb, dan cara membaca pesan error compiler.

Buka →

Bab 3 Tipe Data dan Variabel

# Konsep Variabel

Pahami konsep variabel sebagai nama untuk lokasi memori yang menyimpan nilai bertipe tertentu.

Buka →
# Deklarasi dan Inisialisasi

Pelajari cara mendeklarasikan variabel dan memberi nilai awal sekaligus.

Buka →
# Tipe char

Pelajari tipe char untuk menyimpan karakter dan byte kecil, beserta kode ASCII.

Buka →
# Tipe Integer

Pahami tipe int, ukurannya, dan representasi bilangan bulat bertanda.

Buka →
# Tipe Floating Point

Pelajari float, double, dan long double untuk bilangan desimal.

Buka →
# signed dan unsigned

Pahami perbedaan tipe signed dan unsigned serta implikasi rentang nilainya.

Buka →
# short, long, dan long long

Pelajari modifier short, long, dan long long untuk menyesuaikan ukuran integer.

Buka →
# sizeof dan size_t

Gunakan operator sizeof dan tipe size_t untuk menangani ukuran data secara portabel.

Buka →
# limits.h

Pelajari header limits.h dan float.h yang mendefinisikan batas nilai tiap tipe.

Buka →
# Konstanta

Pahami cara mendefinisikan konstanta dengan #define dan keyword const.

Buka →
# const Qualifier

Pelajari keyword const untuk menandai variabel yang tidak boleh diubah setelah inisialisasi.

Buka →
# Literal

Kenali literal integer, floating point, karakter, dan string dalam kode C.

Buka →
# Representasi Angka

Pahami bagaimana bilangan disimpan dalam bentuk biner, heksadesimal, dan oktal.

Buka →
# Integer Overflow

Pelajari apa itu integer overflow, perilaku undefined, dan cara mendeteksinya.

Buka →
# Floating Point Precision

Pahami keterbatasan presisi floating point dan kesalahan pembulatan.

Buka →
# Type Qualifiers

Kenali qualifier const, volatile, restrict, dan _Atomic pada tipe data C.

Buka →

Bab 5 Operator dan Ekspresi

# Operator Aritmetika

Gunakan operator + - * / % dan pahami pembagian integer.

Buka →
# Operator Relasional

Pelajari operator == != < > <= >= yang menghasilkan nilai int 0 atau 1.

Buka →
# Operator Logika

Gunakan operator && || ! dan pahami short-circuit evaluation.

Buka →
# Operator Assignment

Pelajari operator = dan bentuk augmented seperti += -= *= /= %=.

Buka →
# Increment dan Decrement

Pahami prefix dan postfix ++ -- serta urutan evaluasinya.

Buka →
# Operator Bitwise

Gunakan operator & | ^ ~ << >> untuk manipulasi bit.

Buka →
# Operator Conditional

Pelajari operator ternary ? : dan kapan memakainya menggantikan if-else.

Buka →
# Operator sizeof

Pahami operator sizeof untuk memeriksa ukuran tipe dan objek pada compile time.

Buka →
# Operator Koma

Pelajari operator , untuk mengevaluasi beberapa ekspresi secara berurutan.

Buka →
# Precedence dan Associativity

Kuasai tabel precedence operator C dan urutan evaluasi ekspresi.

Buka →
# Type Conversion

Pahami implicit type conversion yang dilakukan compiler pada ekspresi campuran.

Buka →
# Type Casting

Lakukan explicit type cast dengan operator (type) untuk konversi sengaja.

Buka →
# Integer Promotions

Pelajari aturan integer promotion yang menaikkan tipe kecil ke int sebelum operasi.

Buka →
# Usual Arithmetic Conversions

Pahami aturan usual arithmetic conversions saat dua operand memiliki tipe berbeda.

Buka →
# Undefined Behavior dalam Ekspresi

Hindari UB seperti unsequenced modification dan signed overflow pada ekspresi.

Buka →

Bab 8 Fungsi

# Konsep Fungsi

Pahami fungsi sebagai unit reusable kode dengan input, output, dan tanggung jawab tunggal.

Buka →
# Function Declaration

Pelajari deklarasi fungsi (prototype) untuk memberi tahu compiler tentang signature fungsi.

Buka →
# Function Definition

Tulis definisi fungsi lengkap dengan body dan implementasi.

Buka →
# Function Prototype

Pahami kapan prototype wajib dan manfaatnya untuk type checking.

Buka →
# Parameter dan Argument

Bedakan parameter (definisi) dan argument (pemanggilan) serta passing mode C.

Buka →
# Return Value

Pelajari return value, multiple return via pointer, dan return dari void function.

Buka →
# void Functions

Tulis fungsi void untuk aksi tanpa nilai balik, plus early return.

Buka →
# Pass by Value

Pahami bahwa C selalu pass by value, termasuk pointer yang nilainya adalah alamat.

Buka →
# Pointer Parameters

Gunakan parameter pointer untuk mengubah variabel pemanggil atau menghindari copy besar.

Buka →
# Scope Variabel

Pelajari block scope, file scope, function scope, dan prototype scope variabel.

Buka →
# Local dan Global Variables

Bandingkan variabel lokal dan global, plus kapan menghindari global.

Buka →
# Static Local Variables

Pahami variabel lokal static yang mempertahankan nilainya antar pemanggilan fungsi.

Buka →
# Recursion

Pelajari recursion: base case, recursive case, dan bahaya stack overflow.

Buka →
# Function Pointers (Pengantar)

Kenali function pointer sebagai cara melewatkan fungsi sebagai data.

Buka →
# Merancang Fungsi

Pelajari prinsip merancang fungsi: single responsibility, nama jelas, parameter minimal.

Buka →

Bab 11 Pointer

# Konsep Pointer

Pahami pointer sebagai variabel yang menyimpan alamat memori variabel lain.

Buka →
# Alamat Memori

Pelajari konsep alamat memori, layout virtual memory, dan ukuran pointer.

Buka →
# Address-of Operator

Gunakan operator & untuk memperoleh alamat suatu variabel.

Buka →
# Dereference Operator

Gunakan operator * untuk membaca atau menulis nilai pada alamat yang ditunjuk pointer.

Buka →
# Deklarasi Pointer

Pelajari sintaks deklarasi pointer dan cara membaca tipe pointer.

Buka →
# Null Pointer

Pahami NULL, nullptr di C23, dan pentingnya inisialisasi pointer.

Buka →
# Pointer Arithmetic

Pelajari penjumlahan, pengurangan, dan perbandingan pointer.

Buka →
# Pointer dan Array

Pahami hubungan erat antara pointer dan array, plus decay.

Buka →
# Pointer dan String

Manipulasi string via char pointer dan iterasi karakter.

Buka →
# Pointer sebagai Parameter

Lewatkan pointer ke fungsi untuk mengubah variabel pemanggil atau efisiensi.

Buka →
# Pointer ke Pointer

Pelajari pointer yang menunjuk pointer lain dan kasus pemakaiannya.

Buka →
# void Pointer

Pahami void * sebagai pointer generik dan cara casting-nya.

Buka →
# const dan Pointer

Bedakan const int *, int * const, dan const int * const.

Buka →
# Function Pointer

Pelajari deklarasi dan pemakaian function pointer untuk callback dan dispatch.

Buka →
# Dangling Pointer

Kenali dangling pointer setelah free dan bahaya mengaksesnya.

Buka →
# Wild Pointer

Hindari wild pointer yang tidak diinisialisasi dan cara mencegahnya.

Buka →
# Pointer Aliasing

Pahami aliasing dan efeknya pada optimasi compiler, plus restrict.

Buka →
# Pointer Safety

Pelajari praktik aman: inisialisasi, cek NULL, dan hindari arithmetic keluar bounds.

Buka →

Bab 13 Memory Management

Bab 14 Preprocessor dan Modularitas

Bab 18 Algoritma dan Struktur Data

# Analisis Algoritma

Pelajari cara menganalisis kompleksitas waktu dan ruang algoritma.

Buka →
# Notasi Big O

Pahami notasi Big O, Omega, dan Theta untuk mengukur kompleksitas.

Buka →
# Linear Search

Implementasikan pencarian linear pada array dan analisis kompleksitasnya.

Buka →
# Binary Search

Implementasikan binary search pada array terurut dengan kompleksitas O(log n).

Buka →
# Bubble Sort

Pelajari bubble sort, kompleksitas O(n^2), dan kapan memakainya.

Buka →
# Selection Sort

Implementasikan selection sort dan pahami tradeoff-nya.

Buka →
# Insertion Sort

Pelajari insertion sort yang efisien untuk data hampir terurut.

Buka →
# Merge Sort

Implementasikan merge sort divide-and-conquer dengan kompleksitas O(n log n).

Buka →
# Quicksort

Pelajari quicksort, pivot selection, dan kompleksitas average vs worst case.

Buka →
# Sorting dan Searching

Bandingkan algoritma sorting dan kapan memakai binary search.

Buka →
# Linked List

Implementasikan singly dan doubly linked list dengan dynamic allocation.

Buka →
# Stack

Bangun struktur data stack dengan array atau linked list.

Buka →
# Queue

Implementasikan queue FIFO dengan array sirkular atau linked list.

Buka →
# Circular Buffer

Pelajari circular buffer untuk data streaming yang efisien.

Buka →
# Hash Table

Implementasikan hash table dengan chaining dan open addressing.

Buka →
# Binary Tree

Pelajari binary tree, traversal inorder/preorder/postorder, dan BST.

Buka →
# Heap dan Priority Queue

Implementasikan binary heap dan priority queue.

Buka →
# Graph

Pelajari representasi graph dengan adjacency matrix dan list.

Buka →
# Memilih Struktur Data

Pelajari kriteria memilih struktur data yang tepat untuk setiap masalah.

Buka →

Bab 19 Advanced C

# Function Pointers

Kuasai deklarasi dan pemakaian function pointer untuk callback tingkat lanjut.

Buka →
# Callbacks

Rancang API berbasis callback untuk event-driven dan inversion of control.

Buka →
# Generic Programming dengan void Pointer

Tulis fungsi generik memakai void * dan callback, seperti qsort.

Buka →
# qsort dan bsearch

Pakai qsort dan bsearch dari stdlib.h dengan comparator function.

Buka →
# Variadic Functions

Tulis fungsi dengan jumlah argumen variabel seperti printf.

Buka →
# va_list dan va_args

Akses argumen variadic lewat va_list, va_start, va_arg, va_end.

Buka →
# Compound Literals

Buat objek anonim inline dengan compound literals (C99).

Buka →
# Designated Initializers

Inisialisasi struct dan array dengan designated initializer (C99).

Buka →
# Flexible Array Members

Pelajari FAM di akhir struct untuk data variabel (C99).

Buka →
# restrict Qualifier

Pakai restrict untuk menandai tidak ada aliasing dan bantu optimasi.

Buka →
# volatile Qualifier

Pahami volatile untuk akses memory-mapped IO dan signal handler.

Buka →
# Atomics

Pelajari _Atomic dan stdatomic.h untuk operasi concurrent tanpa race.

Buka →
# Memory Model

Pahami memory model C11: sequential consistency dan ordering.

Buka →
# Alignment

Pelajari _Alignas, _Alignof, alignof, dan aligned_alloc.

Buka →
# Bit Manipulation

Kuasai teknik manipulasi bit: set, clear, toggle, dan check bit.

Buka →
# Implementation-Defined Behavior

Bedakan implementation-defined behavior dan implikasi portabilitas.

Buka →
# Unspecified Behavior

Pahami unspecified behavior dan cara menulis kode yang tidak mengandalkannya.

Buka →
# Undefined Behavior

Kenali daftar UB di C dan strategi menghindarinya.

Buka →
# Portability

Tulis kode C portabel lintas compiler, OS, dan arsitektur.

Buka →