sinau-c/content/structures.md

154 lines
4.0 KiB
Markdown

---LESSON_INFO---
**Learning Objectives:**
- Memahami konsep struktur (struct) dalam bahasa C
- Belajar mendeklarasikan dan menggunakan struktur
- Mengenal typedef untuk membuat alias tipe data
- Memahami aplikasi struktur dalam program
**Prerequisites:**
- Pemahaman tentang variabel dan tipe data
- Pemahaman dasar tentang pointer
---END_LESSON_INFO---
# Struktur dalam C
Struktur dalam C adalah variabel khusus yang besar yang berisi beberapa variabel bernama di dalamnya. Struktur adalah dasar utama untuk objek dan kelas dalam C. Struktur digunakan untuk:
* Serialisasi data
* Melewatkan beberapa argumen masuk dan keluar dari fungsi melalui satu argumen
* Struktur data seperti daftar tertaut, pohon biner, dan lainnya
Contoh paling dasar dari struktur adalah **titik**, yang merupakan entitas tunggal yang berisi dua variabel - `x` dan `y`. Mari kita definisikan sebuah titik:
```c
struct point {
int x;
int y;
};
```
Sekarang, mari kita definisikan titik baru, dan gunakan. Asumsikan fungsi `draw` menerima titik dan menggambarnya di layar. Tanpa struct, penggunaannya akan memerlukan dua argumen - masing-masing untuk setiap koordinat:
```c
/* menggambar titik di 10, 5 */
int x = 10;
int y = 5;
draw(x, y);
```
Menggunakan struct, kita bisa melewatkan argumen titik:
```c
/* menggambar titik di 10, 5 */
struct point p;
p.x = 10;
p.y = 5;
draw(p);
```
Untuk mengakses variabel titik, kita menggunakan operator titik `.`.
## Typedef
Typedef memungkinkan kita untuk mendefinisikan tipe dengan nama yang berbeda - yang bisa sangat berguna ketika berurusan dengan struct dan pointer. Dalam kasus ini, kita ingin menghilangkan definisi panjang dari struktur titik. Kita bisa menggunakan sintaks berikut untuk menghapus kata kunci `struct` dari setiap kali kita ingin mendefinisikan titik baru:
```c
typedef struct {
int x;
int y;
} point;
```
Ini akan memungkinkan kita untuk mendefinisikan titik baru seperti ini:
```c
point p;
```
Struktur juga bisa menyimpan pointer - yang memungkinkan mereka menyimpan string, atau pointer ke struktur lain juga - yang merupakan kekuatan sejati mereka. Sebagai contoh, kita bisa mendefinisikan struktur kendaraan dengan cara berikut:
```c
typedef struct {
char * brand;
int model;
} vehicle;
```
Karena brand adalah pointer char, tipe vehicle bisa berisi string (dalam hal ini, menunjukkan merek kendaraan).
```c
vehicle mycar;
mycar.brand = "Ford";
mycar.model = 2007;
```
---
## Tabel Komponen Struktur dalam C
| Komponen | Deskripsi | Contoh |
|----------|-----------|--------|
| struct | Mendeklarasikan struktur | `struct name { ... };` |
| typedef | Membuat alias untuk tipe data | `typedef struct { ... } name;` |
| Akses anggota | Mengakses elemen struktur | `struct_var.member` |
| Pointer ke anggota | Mengakses elemen lewat pointer | `ptr->member` |
---EXERCISE---
# Latihan: Membuat Struktur Orang
Definisikan struktur data baru, bernama "person", yang berisi string (pointer ke char) bernama `name`, dan integer bernama `age`.
**Requirements:**
- Buat struktur person dengan dua anggota
- Gunakan pointer char untuk name
- Gunakan integer untuk age
- Gunakan typedef untuk membuat alias
**Expected Output:**
```
John is 27 years old.
```
Try writing your solution in the code editor below!
---KEY_TEXT---
typedef struct
char * name
int age
person
---END_KEY_TEXT---
---EXPECTED_OUTPUT---
John is 27 years old.
---END_EXPECTED_OUTPUT---
---INITIAL_CODE---
#include <stdio.h>
/* definisikan struct person di sini menggunakan sintaks typedef */
int main() {
person john;
/* kode pengujian */
john.name = "John";
john.age = 27;
printf("%s is %d years old.", john.name, john.age);
}
---END_INITIAL_CODE---
---SOLUTION_CODE---
#include <stdio.h>
typedef struct {
char * name;
int age;
} person;
int main() {
person john;
/* kode pengujian */
john.name = "John";
john.age = 27;
printf("%s is %d years old.", john.name, john.age);
}
---END_SOLUTION_CODE---