Artikel Terbaru

5 Kondisi Untuk Melewatkan Array 2D sebagai Parameter Bahasa C

Berbeda dengan array 1D yang dapat dengan mudah dilewatkan sebagai pointer. Proses melewatkan array tersebut agak sedikit sulit karena struktur array 2D yang agak rumit daripada array 1D. Namun demikian, satu hal yang penting yang harus diingat adalah untuk melewatkan array multidimensi, array pertama tidak harus ditentukan, melainkan hanya array dimensi kedua saja yang harus diberikan.

satu, Ketika kedua dimensi tersedia secara global baik sebagai makro ataupun sebagai konstanta global.

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.

Contoh:

#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 

Komentar

  1. Apa yang dimaksud dengan array dua dimensi pada bahasa C?

    BalasHapus
    Balasan
    1. Array 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.

      Hapus
  2. Apakah bahasa C membatasi penggunaan deklarasi array berukuran variabel, sedangkan pada C++ tidak? seperti pada contoh kondisi kasus 1.

    BalasHapus
    Balasan
    1. Tidak benar. C99 mengizinkan penggunaan array berukuran variabel.

      Hapus
  3. Kenapa pada array 2D tidak perlu melewatkan dimensi apapun pada dimensi pertama?

    BalasHapus
    Balasan
    1. Contoh 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).

      Hapus
  4. Mengapa perlu melewati minimal 2 dimensi untuk array 2D pada fungsi?

    BalasHapus
    Balasan
    1. Contoh, void fun(int a[][n], int m, int n), dimana untuk menghitung alamat a[i][j];

      maka, 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.

      Hapus
  5. Contoh progam yang ketika memberikan hasil yang salah, penggunaan array mestikanya menggunakan pointer atau double pointer. Pls check.

    BalasHapus
  6. Pada (arr + i*n) apakah dibutuhkan penggunaan tanda kurung atau hanya bisa menggunakan *(arr + i*n + j)?

    BalasHapus
    Balasan
    1. Dapat 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.

      Hapus
  7. Bisa beritahukan jenis kompilator yang kompatibel dengan C99?

    BalasHapus
    Balasan
    1. Salah satu jenis kompilator yang kompatibel dengan C99 adalah kompilator gcc.

      Hapus

Posting Komentar

Respon komentar 7 x 24 jam, so please be patient :D

Hot Artikel!!!

Enkapsulasi pada Java

6 Tahap Utama dalam Melakukan Kompilasi Program Hello World Java

6 Contoh Program Method Overloading pada Java