Array Dua Dimensi Sebagai Parameter Bahasa C
Contoh:
#include <stdio.h>
const int M = 3;
const int N = 3;
void print(int arr[M][N])
{
int i, j;
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
printf("%d ", arr[i][j]);
}
int main()
{
int arr[][3] =
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
print(arr);
return 0;
}
Output:1 2 3 4 5 6 7 8 9
dua, Ketika hanya tersedia dimensi kedua sebagai tipe global baik sebagai makro ataupun sebagai konstanta global.
#include <stdio.h>
const int N = 3;
void print(int arr[][N], int m)
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < N; j++)
printf("%d ", arr[i][j]);
}
int main()
{
int arr[][3] =
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
print(arr, 3);
return 0;
}
Output:1 2 3 4 5 6 7 8 9
tiga, Jika kompilator kompatibel dengan tipe C99
Pada bahasa C tipe C99, bahasa C dapat mendukung penggunaan variabel yang berukuran array untuk dapat dilewatkan hanya dengan melakukan penentuan dimensi dari variabel.
Contoh:
// Program berikut dapat
// bekerja jika kompilator
// kompatibel dengan C99.
#include <stdio.h>
// n harus dilewatkan sebelum
// array 2D.
void print(int m, int n, int arr[][n])
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
printf("%d ", arr[i][j]);
}
int main()
{
int arr[][3] =
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int m = 3, n = 3;
print(m, n, arr);
return 0;
}
Output:1 2 3 4 5 6 7 8 9
Namun, jika bahasa C yang digunakan tidak kompatibel dengan tipe C99, maka dapat menggunakan method tertentu untuk dapat melewatkan variabel array dengan tipe 2D.
empat, Menggunakan pointer tunggal
Pada contoh berikut ini, harus dilakukan typecast array 2D ketika akan melewatkan array menuju ke fungsi tertentu.
Contoh:
#include <stdio.h>
void print(int *arr, int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
printf("%d ", *((arr+i*n) + j));
}
int main()
{
int arr[][3] =
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int m = 3, n = 3;
// Juga dapat mencetak
// "print(&arr[0][0], m, n);"
print((int *)arr, m, n);
return 0;
}
Output:1 2 3 4 5 6 7 8 9
lima, Menggunakan konsep pointer to array
Contoh:
#include <stdio.h>
const int M = 3;
void print(int (*arr)[M])
{
int i, j;
for (i = 0; i < M; i++)
for (j = 0; j < M; j++)
printf("%d ", arr[i][j]);
}
int main()
{
int arr[][3] =
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
print(arr);
return 0;
}
Output:1 2 3 4 5 6 7 8 9
- Mengakses Array di Luar Batas Bahasa C [klik]
- Strcpy Bahasa C dan Fungsinya [klik]
- Membandingkan Dua String Menggunakan STRCMP pada Bahasa C [klik]
- Menduplikasi Nilai String Menggunakan STRDUP dan STRNDUP pada Bahasa C [klik]
- Melewatkan Nilai Array Melalui Value pada Bahasa C [klik]
- Berbagai Metode Untuk Melakukan Reversi String pada Bahasa C [klik]
- Mencari Kecocokkan Karakter Menggunakan strpbrk() Bahasa C [klik]
Apa yang dimaksud dengan array dua dimensi pada bahasa C?
BalasHapusArray dua dimensi dapat didefinisikan sebagai array dari array. Array dua dimensi atau array 2D diatur sebagai matriks yang dapat merepresentasikan kumpulan baris dan kolom. Namun, array 2D dibuat untuk mengimplementasikan struktur data yang mirip database relasional.
HapusApakah bahasa C membatasi penggunaan deklarasi array berukuran variabel, sedangkan pada C++ tidak? seperti pada contoh kondisi kasus 1.
BalasHapusTidak benar. C99 mengizinkan penggunaan array berukuran variabel.
HapusKenapa pada array 2D tidak perlu melewatkan dimensi apapun pada dimensi pertama?
BalasHapusContoh void fun(int a[], int n), dimana kompilator dapat melakukan kalkulasi yang berkaitan dengan elemen larik atau dimensi apapun pada a[1] tanpa perlu informasi dari dimensi apapun seperti, addr a[1]=(addr of a)*i*(size of int).
HapusMengapa perlu melewati minimal 2 dimensi untuk array 2D pada fungsi?
BalasHapusContoh, void fun(int a[][n], int m, int n), dimana untuk menghitung alamat a[i][j];
Hapusmaka, addr a[i][j] = addr of a + (i) * (jumlah cols) * (size of int) + j*(size of int) untuk array yang disimpan dalam baris.
Oleh karena itu, setidaknya memerlukan informasi jumlah kolom untuk dapat menghitung alamat yang berkaitan dengan elemen pada dimensi kedua array secara akurat.
Contoh progam yang ketika memberikan hasil yang salah, penggunaan array mestikanya menggunakan pointer atau double pointer. Pls check.
BalasHapusPada (arr + i*n) apakah dibutuhkan penggunaan tanda kurung atau hanya bisa menggunakan *(arr + i*n + j)?
BalasHapusDapat dilewatkan larik satu dimensi ke suatu fungsi dengan melewatkan alamat dasar atau alamat elemen pertama larik. Juga dapat diteruskan nama array yang setara dengan alamat dasar atau meneruskan alamat elemen pertama array seperti &array[0]. Demikian pula, dapat dilewatkan array multidimensi sebagai parameter formal.
HapusBisa beritahukan jenis kompilator yang kompatibel dengan C99?
BalasHapusSalah satu jenis kompilator yang kompatibel dengan C99 adalah kompilator gcc.
Hapus