140 lines
3.4 KiB
Markdown
140 lines
3.4 KiB
Markdown
---LESSON_INFO---
|
|
**Learning Objectives:**
|
|
- Memahami konsep variabel dan fungsi static dalam bahasa C
|
|
- Belajar menggunakan kata kunci static dalam berbagai konteks
|
|
- Mengenal perbedaan antara static dan variabel global
|
|
- Memahami aplikasi static dalam program
|
|
|
|
**Prerequisites:**
|
|
- Pemahaman tentang variabel dan fungsi
|
|
- Pemahaman dasar tentang scope variabel
|
|
|
|
---END_LESSON_INFO---
|
|
# Static dalam C
|
|
|
|
`static` adalah kata kunci dalam bahasa pemrograman C. Ini bisa digunakan dengan variabel dan fungsi.
|
|
|
|
## Apa itu variabel static?
|
|
Secara default, variabel adalah lokal terhadap cakupan di mana mereka didefinisikan. Variabel bisa dideklarasikan sebagai static untuk meningkatkan cakupan mereka hingga file yang berisi mereka. Akibatnya, variabel-variabel ini bisa diakses di mana saja di dalam file.
|
|
|
|
Pertimbangkan skenario berikut - di mana kita ingin menghitung pelari yang berpartisipasi dalam sebuah lomba:
|
|
|
|
```c
|
|
#include <stdio.h>
|
|
int runner() {
|
|
int count = 0;
|
|
count++;
|
|
return count;
|
|
}
|
|
|
|
int main() {
|
|
printf("%d ", runner());
|
|
printf("%d ", runner());
|
|
return 0;
|
|
}
|
|
```
|
|
|
|
Kita akan melihat bahwa `count` tidak diperbarui karena itu dihapus dari memori segera setelah fungsi selesai. Namun, jika `static` digunakan, kita mendapatkan hasil yang diinginkan:
|
|
|
|
```c
|
|
#include <stdio.h>
|
|
int runner() {
|
|
static int count = 0;
|
|
count++;
|
|
return count;
|
|
}
|
|
|
|
int main() {
|
|
printf("%d ", runner());
|
|
printf("%d ", runner());
|
|
return 0;
|
|
}
|
|
```
|
|
|
|
## Apa itu fungsi static?
|
|
Secara default, fungsi-fungsi adalah global dalam C. Jika kita deklarasikan fungsi dengan `static`, cakupan fungsi tersebut dikurangi ke file yang berisi fungsi tersebut.
|
|
|
|
Sintaksnya seperti ini:
|
|
|
|
```c
|
|
static void fun(void) {
|
|
printf("Saya adalah fungsi static.");
|
|
}
|
|
```
|
|
|
|
## Static vs Global?
|
|
Sementara variabel static memiliki cakupan di file yang berisi mereka sehingga hanya bisa diakses di dalam file tertentu, variabel global bisa diakses di luar file juga.
|
|
|
|
---
|
|
|
|
## Tabel Penggunaan Static dalam C
|
|
|
|
| Konteks | Deskripsi | Contoh |
|
|
|---------|-----------|--------|
|
|
| Variabel lokal | Variabel yang mempertahankan nilai antar pemanggilan fungsi | `static int count = 0;` |
|
|
| Variabel global | Variabel yang hanya bisa diakses dalam file yang sama | `static int global_var;` |
|
|
| Fungsi | Fungsi yang hanya bisa diakses dalam file yang sama | `static void myfunc();` |
|
|
|
|
---EXERCISE---
|
|
|
|
# Latihan: Menggunakan Static untuk Menjumlahkan Angka
|
|
|
|
Dalam latihan ini, cobalah untuk menemukan jumlah beberapa angka dengan menggunakan kata kunci static. Jangan melewatkan variabel apapun yang mewakili total berjalan ke fungsi `sum()`.
|
|
|
|
**Requirements:**
|
|
- Gunakan variabel static dalam fungsi sum
|
|
- Fungsi harus mengingat total sebelumnya
|
|
- Jangan lewatkan variabel total sebagai parameter
|
|
|
|
**Expected Output:**
|
|
```
|
|
55
|
|
100
|
|
150
|
|
```
|
|
|
|
Try writing your solution in the code editor below!
|
|
|
|
---KEY_TEXT---
|
|
static int total
|
|
total += num
|
|
return total
|
|
---END_KEY_TEXT---
|
|
|
|
---EXPECTED_OUTPUT---
|
|
55
|
|
100
|
|
150
|
|
---END_EXPECTED_OUTPUT---
|
|
|
|
---INITIAL_CODE---
|
|
#include <stdio.h>
|
|
int sum (int num) {
|
|
/**
|
|
* hitung jumlah ke n angka
|
|
*/
|
|
}
|
|
|
|
int main() {
|
|
printf("%d ",sum(55));
|
|
printf("%d ",sum(45));
|
|
printf("%d ",sum(50));
|
|
return 0;
|
|
}
|
|
---END_INITIAL_CODE---
|
|
|
|
---SOLUTION_CODE---
|
|
#include <stdio.h>
|
|
int sum (int num) {
|
|
static int total = 0;
|
|
total += num;
|
|
return total;
|
|
}
|
|
|
|
int main() {
|
|
printf("%d ",sum(55));
|
|
printf("%d ",sum(45));
|
|
printf("%d ",sum(50));
|
|
return 0;
|
|
}
|
|
---END_SOLUTION_CODE--- |