Pemrograman C

Array 2D

Array 2D
Array dua dimensi (2D) adalah array dari array satu dimensi (1D). Ukuran array 1D sama. Array 2D juga disebut matriks dengan baris dan kolom.

Mari kita lihat contoh berikut:

3 array 1D ini dapat direpresentasikan sebagai array 2D sebagai berikut:

Mari kita lihat contoh lain:

Array 3 1D ini tidak dapat direpresentasikan sebagai array 2D karena ukuran array berbeda.

Deklarasi larik 2D

tipe data nama-array[BARIS][COL]

int [2][3];

Dengan menggunakan kode C di atas, kita dapat mendeklarasikan sebuah bilangan bulat Himpunan, Sebuah dari ukuran 2*3 (2 Baris dan 3 Kolom).

char b[3][2];

Dengan menggunakan kode C di atas, kita dapat mendeklarasikan a karakter Himpunan, b dari ukuran 2*3 (3 Baris dan 2 Kolom).

Inisialisasi array 2DD

Kita dapat menginisialisasi selama deklarasi dengan cara berikut:

  1. int a[3][2] = 1,2,3,4,5,6;
  2. int a[][2] = 1,2,3,4,5,6;
  3. int a[3][2] = 1, 2,3, 4,5, 6;
  4. int a[][2] = 1, 2,3, 4,5, 6;

Perhatikan bahwa dalam 2 dan 4 kami belum menyebutkan 1st berlangganan. Kompiler C secara otomatis menghitung jumlah baris dari jumlah elemen. Tapi 2dan subskrip harus ditentukan. Inisialisasi berikut tidak valid:

  1. int a[3][] = 1,2,3,4,5,6;
  2. int a[][] = 1,2,3,4,5,6;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//Contoh 1.c
#termasuk
#tentukan baris 3
#tentukan COL 2
int utama()

int i,j;
int a[ROW][COL] =
1,2,
3,4,
5,6
;
printf("Elemen baris dari array a adalah :\n");
untuk(i=0;i
printf("Baris %d:",i);
untuk(j=0;j
printf("%d",a[i][j]);

printf("\n");

printf("\n\nElemen berdasarkan kolom dari array a adalah :\n");
untuk(i=0;i
printf("Kolom %d:",i);
untuk(j=0;j
printf("%d",a[j][i]);

printf("\n");

kembali 0;

Dalam Contoh1.c, kami telah mendeklarasikan array integer ukuran 3*2 dan diinisialisasi. Untuk mengakses elemen array, kami menggunakan dua for loop.

Untuk mengakses baris-bijaksana, loop luar untuk baris, dan loop dalam untuk kolom.

Untuk mengakses kolom-bijaksana, loop luar untuk kolom, dan loop dalam untuk baris.

Perhatikan bahwa ketika kita mendeklarasikan array 2D, kita menggunakan a[2][3], yang berarti 2 baris dan 3 kolom. Pengindeksan array dimulai dari 0. Untuk mengakses 2dan baris dan 3rd kolom, kita harus menggunakan notasi a[1][2].

Pemetaan memori array 2D

Tampilan logis dari sebuah array sebuah[3][2] mungkin sebagai berikut:

Memori komputer adalah urutan byte 1D. Dalam bahasa C, array 2D disimpan dalam memori di urutan baris-utama. Beberapa bahasa pemrograman lain (mis.g., FORTRAN), disimpan di kolom-urutan utama dalam memori.

Aritmatika Pointer dari array 2D

Untuk memahami aritmatika pointer dari array 2D, pertama, lihat array 1D.

Pertimbangkan larik 1D:

Dalam susunan 1D, Sebuah adalah konstanta, dan nilainya adalah alamat 0ini lokasi array sebuah[5]. Nilai dari a+1 adalah alamat 1st lokasi array sebuah[5].  a+i adalah alamat sayaini lokasi array.

Jika kita bertambah Sebuah dengan 1, itu bertambah dengan ukuran tipe data.

sebuah[1] setara dengan *(a+1)

sebuah [2] setara dengan *(a+2)

a[i] setara dengan *(a+i)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Contoh2.c
#termasuk
#tentukan baris 3
#tentukan COL 2
int utama()

int a[5]=10,20,30,40,50;
printf("ukuran(int): %ld\n\n",ukuran(int));
printf("a: %p\n",a);
printf("a+1: %p\n",a+1);
printf("a+2: %p\n\n",a+2);
printf("a[1]: %d, *(a+1): %d\n",a[1],*(a+1));
printf("a[2]: %d, *(a+2): %d\n",a[1],*(a+1));
printf("a[3]: %d, *(a+3): %d\n",a[1],*(a+1));
kembali 0;

Dalam Contoh2.c, alamat memori ditampilkan dalam heksadesimal. Perbedaan antara a dan a+1 adalah 4, yang merupakan ukuran bilangan bulat dalam byte.

Sekarang, pertimbangkan array 2D:

b adalah penunjuk tipe: masuk[ ][4] atau int(*)[4]

masuk[ ][4] adalah barisan dari 4 bilangan bulat. Jika kita menambah b dengan 1, itu bertambah dengan ukuran baris.

b adalah alamat 0ini baris.

b+1 adalah alamat 1st baris.

b+i adalah alamat sayaini baris.

Ukuran baris adalah: (Jumlah kolom * sizeof(tipe data)) byte

Ukuran baris dari array integer b[3][4] adalah: 4 * sizeof(int) = 4 * 4 = 16 byte

Baris array 2D dapat dilihat sebagai array 1D. b adalah alamat 0ini baris. Jadi, kita mendapatkan yang berikut

Alamat b[i][j]: b + sizeof(tipe data) * ( Jumlah kolom * i + j)

Pertimbangkan larik 2D: int b[3][4]

Alamat b[2][1] adalah : b + ukuran(int) * (4*2 + 1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//Contoh3.c
#termasuk
#tentukan baris 3
#definisikan COL 4
int utama()

int i,j;
int b[ROW][COL] =
10,20,30,40,
50,60,70,80,
90.100.110.120
;
printf("ukuran(int): %ld\n",ukuran(int));
printf("Ukuran Baris: %ld\n",COL*sizeof(int));
printf("b: %p\n",b);
printf("b+1: %p\n",b+1);
printf("b+2: %p\n",b+2);
printf("*b: %p\n",*b);
printf("*b+1: %p\n",*b+1);
printf("*b+2: %p\n",*b+2);
printf("b[0][0]: %d **b: %d\n",b[0][0],**b);
printf("b[0][1]: %d *(*b+1): %d\n",b[0][1],*(*b+1));
printf("b[0][2]: %d *(*b+2): %d\n",b[0][2],*(*b+2));
printf("b[1][0]: %d *(*(b+1)): %d\n",b[1][0],*(*(b+1)));
printf("b[1][1]: %d *(*(b+1)+1): %d\n",b[1][1],*(*(b+1)+1) );
kembali 0;

Dalam Contoh3.c, kita telah melihat bahwa ukuran baris adalah 16 dalam notasi desimal. Perbedaan antara b+1 dan b adalah 10 dalam heksadesimal. 10 dalam heksadesimal setara dengan 16 dalam desimal.

Kesimpulan

Jadi, dalam artikel ini, kita telah belajar tentang

  1. Deklarasi larik 2D
  2. Inisialisasi array 2DD
  3. Pemetaan memori array 2D
  4. Aritmatika Pointer dari array 2D

Sekarang kita dapat menggunakan array 2D dalam program C kita tanpa keraguan,

Referensi

Penghargaan untuk beberapa ide dalam karya ini terinspirasi oleh kursus, Pointer dan Array 2-D, oleh Palash Dey Department of Computer Science & Engg. Institut Teknologi India Kharagpur

Kursor melompat atau bergerak secara acak saat mengetik di Windows 10
Jika Anda menemukan bahwa kursor mouse Anda melompat atau bergerak sendiri, secara otomatis, acak saat mengetik di laptop atau komputer Windows, maka ...
Cara membalikkan arah gulir Mouse dan Touchpads di Windows 10
Mouse dan Panel sentuhs tidak hanya membuat komputasi menjadi mudah tetapi juga lebih efisien dan tidak memakan banyak waktu. Kami tidak dapat membaya...
Cara mengubah penunjuk Mouse dan ukuran kursor, warna & skema pada Windows 10
Penunjuk mouse dan kursor di Windows 10 adalah aspek yang sangat penting dari sistem operasi. Ini dapat dikatakan untuk sistem operasi lain juga, jadi...