154 lines
4.0 KiB
Markdown
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--- |