Fungsi dan Array · Pelajaran 7 dari 12
Array
9 menit baca · BelajarCode
Array adalah deretan nilai bertipe sama yang disimpan berdampingan di memori. Ukurannya ditentukan saat dideklarasikan dan tidak bisa berubah.
1#include <stdio.h>23int main(void) {4 int nilai[5] = {78, 92, 65, 88, 71};5 int jumlah = 0, tertinggi = nilai[0];6 for (int i = 0; i < 5; i++) {7 jumlah += nilai[i];8 if (nilai[i] > tertinggi) tertinggi = nilai[i];9 }10 printf("Rata-rata: %.2f\n", jumlah / 5.0);11 printf("Tertinggi: %d\n", tertinggi);12 return 0;13}Rata-rata: 78.80 Tertinggi: 92
jumlah / 5.0 membagi dengan bilangan pecahan, sehingga hasilnya tidak dibulatkan.
C tidak memeriksa batas array
Array berisi 5 elemen punya indeks 0 sampai 4. Mengakses nilai[5] tidak menghasilkan pesan error seperti di Python, melainkan membaca atau menulis memori di luar array. Akibatnya tidak terdefinisi: program bisa terlihat normal, menghasilkan nilai acak, atau berhenti mendadak. Kesalahan ini adalah sumber banyak celah keamanan.
Mengirim array ke fungsi
Saat dikirim ke fungsi, array berubah menjadi pointer ke elemen pertamanya, sehingga fungsi tidak tahu panjangnya. Karena itu panjang array selalu dikirim sebagai parameter terpisah.
1#include <stdio.h>23double rata_rata(const int data[], int n) {4 long long total = 0;5 for (int i = 0; i < n; i++) total += data[i];6 return (double)total / n;7}89void kali_dua(int data[], int n) {10 for (int i = 0; i < n; i++) data[i] *= 2;11}1213int main(void) {14 int angka[] = {3, 5, 7, 9};15 int n = sizeof(angka) / sizeof(angka[0]);16 printf("Rata-rata: %.2f\n", rata_rata(angka, n));17 kali_dua(angka, n);18 for (int i = 0; i < n; i++) printf("%d ", angka[i]);19 printf("\n");20 return 0;21}Rata-rata: 6.00 6 10 14 18
sizeof(angka) / sizeof(angka[0])menghitung banyaknya elemen. Trik ini hanya berlaku di tempat array dideklarasikan.constpada parameter menjanjikan bahwa fungsi tidak mengubah isi array.- Berbeda dengan variabel biasa, isi array bisa diubah oleh fungsi, karena yang dikirim adalah alamatnya.
Array dua dimensi
1#include <stdio.h>23int main(void) {4 int nilai[3][2] = {{80, 75}, {92, 88}, {70, 85}};5 for (int i = 0; i < 3; i++) {6 printf("Mahasiswa %d: rata-rata %.1f\n", i + 1, (nilai[i][0] + nilai[i][1]) / 2.0);7 }8 return 0;9}Mahasiswa 1: rata-rata 77.5 Mahasiswa 2: rata-rata 90.0 Mahasiswa 3: rata-rata 77.5
Cek pemahaman
Apa yang terjadi saat program C membaca arr[10] dari array int arr[10]?
Latihan
Membalik array
Tulis fungsi balik(int data[], int n) yang membalik urutan isi array di tempat, tanpa array tambahan. Uji dengan {1, 2, 3, 4, 5, 6}.
Pembahasan
1#include <stdio.h>23void balik(int data[], int n) {4 for (int i = 0, j = n - 1; i < j; i++, j--) {5 int sementara = data[i];6 data[i] = data[j];7 data[j] = sementara;8 }9}1011int main(void) {12 int angka[] = {1, 2, 3, 4, 5, 6};13 int n = sizeof(angka) / sizeof(angka[0]);14 balik(angka, n);15 for (int i = 0; i < n; i++) printf("%d ", angka[i]);16 printf("\n");17 return 0;18}6 5 4 3 2 1
Dua indeks bergerak dari ujung ke tengah dan saling menukar isi. Perulangan berhenti saat keduanya bertemu, jadi hanya n / 2 pertukaran.
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler C online.