Kā izveidot un izmantot 2D masīvus C valodā
Masīvi ļauj C valodā uzglabāt saistītu datu kopu, neveidojot vairākas mainīgās. Parasti masīvi ir vienmērīgi, bet tos var paplašināt, lai iekļautu jebkuru dimensiju skaitu. Mēs parādīsim, kā C valodā izveidot 2D masīvus un kā tos efektīvi izmantot.
Kādi ir masīvu veidošanas pamati C valodā?
Lai varētu izveidot un apgūt 2D masīvus C valodā, jums ir jāzina šīs struktūras pamati C programmēšanas valodā.
Līdzīgi kā daudzās citās valodās, masīvi C valodā ir atmiņas bloks, kurā var saglabāt vairākas viena datu tipa vērtības. Tas ļauj saglabāt un apvienot vairākas vērtības zem viena mainīgā nosaukuma. Masīva izmērs ir jāzina kompilācijas laikā, un to pēc tam nevar mainīt. Šis koda bloks ilustrē, kā veidot masīvus C valodā:
int numbers1[15];
// Optionally, the saved values can be specified when they are created:
int numbers2[5] = {1, 2, 3, 4, 5};cDatu tips ir norādīts pirms mainīgā vārda. Šajā piemērā kvadrātiekavas norāda, ka šis mainīgais nav atsevišķa vērtība, bet masīvs. Skaitlis starp iekavām norāda, cik daudz šī datu tipa elementu var tikt saglabāti masīvā. Iepriekš minētajā piemērā masīvs number1 ir izveidots neinicializēts. Tas nozīmē, ka laukos nav ierakstītas nekādas vērtības. Tās var tikt aizpildītas ar vērtībām kodā vēlāk.
Savukārt masīvs number2 tiek inicializēts manuāli, kad tas tiek izveidots. Šī pieeja ir laikietilpīga lielākiem masīviem, un rezultātā iegūtais kods bieži vien ir nesaprotams. Tāpēc vairumā gadījumu tā nav labākā pieeja. Parasti ir labāk mēģināt aizpildīt masīvus programmatiski. To var izdarīt, piemēram, izmantojot for-cilpu:
int numbers3[100];
for(int i = 0; i < 100; i++) {
numbers3[i] = i + 1;
}
// Creates an array containing the integers 1 to 100.cAtkarībā no jūsu operētājsistēmas, izmantotā C standarta un vietas, kur programmā esat deklarējis neinicializētu mainīgo, šis mainīgais var saturēt nejaušu vērtību. Tas attiecas arī uz masīvu laukiem. Tāpēc ir labāk neizmantot laukus, kurus vēl neesat inicializējis, jo īpaši, ja tajos saglabātā vērtība tiek interpretēta kā rādītājs.
Kad masīvs ir izveidots, varat izmantot tā indeksu, lai piekļūtu atsevišķām vērtībām. Ir svarīgi atzīmēt, ka masīvi sākas ar indeksu 0. To parāda zemāk redzamais piemērs:
int numbers2[5] = {1, 2, 3, 4, 5};
numbers2[3] = numbers2[2];
printf("%d\n", numbers2[3]);
// Output: 3c2D masīvu var izveidot C valodā, izveidojot masīvu, kurā katrs lauks satur citu masīvu. Vairāk par 2D masīviem varat lasīt nākamajā sadaļā.
Kā izveidot 2D masīvus C valodā
2D masīvi C valodā patiesībā ir vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vienkārši vien
ints_two_dimensions[10][10];
ints_two_dimensions [0][1] = 0;
ints_two_dimensions [2][1] = 2;
ints_two_dimensions [9][4] = 36;
// etc.cŠeit skaitlis kreisajā kvadrātiekavā norāda indeksu, kas jāizmanto pirmajā masīvā. Skaitlis labajā pusē norāda indeksu otrajā masīvā. Uztveriet šos divus skaitļus kā 2D koordinātas vai rindu vai kolonnu numurus. Tāpat kā vienkāršos masīvus, arī divkāršos masīvus var inicializēt ar vērtībām, kad tie tiek izveidoti.
floats_two_dimensions[2][6] = {
{0.1, 3.56, 6.346, 8.9, 45.345, 2.284},
{7.0, 1.12, 9.74, 0.0, 3.56, 4.4}
}cPrincips, ka masīvs var atrasties citā masīvā, nav ierobežots ar divām dimensijām. Šo metodi var izmantot, lai izveidotu masīvus ar jebkuru dimensiju skaitu.
int ints_four_dimensions[10][10][10][10];cKā izmantot 2D masīvus C valodā
Atkārtojiet 2D masīvu
2D masīvi C valodā (vai daudzdimensiju masīvi) visbiežāk tiek izmantoti, lai izveidotu daudzdimensiju datu struktūras. Turpmākajā piemērā divdimensiju masīvs tiek aizpildīts ar nulēm un vieniniekiem, lai attēlotu šaha galdiņu:
#include <stdio.h>
#define ARRAY_LENGTH 8
int main() {
int chessboard[8][8];
for(int i = 0; i < ARRAY_LENGTH; i++) {
for(int j = 0; j < ARRAY_LENGTH; j++) {
chessboard[i][j] = (i + j) % 2;
printf("%d", chessboard[i][j]);
}
printf("\n");
}
return 0;
}
/*
Output:
01010101
10101010
01010101
10101010
01010101
10101010
01010101
10101010
*/cString masīvi
Ja vēlaties prasmīgi izmantot masīvus, ir svarīgi atcerēties, ka masīvs ir tikai norāde uz vietu atmiņā, un tā C kompilators to saprot. Indekss, kas norādīts, rakstot vai lasot atsevišķus laukus, attēlo nobīdi gar masīvu attiecībā pret bāzes adresi. Lai labāk izprastu šo jēdzienu, apskatīsim šādu piemēru:
#include <stdio.h>
int main() {
int number2[5] = {1, 2, 3, 4, 5};
printf("%d\n", *number2);
// Output: 1
printf("%d\n", *(number2 + 2));
// Output: 3
}cStingus C valodā apstrādā tāpat. Stingu var iziet kā masīvu. To var redzēt šajā piemērā, kur trīs ieraksti, kas saglabāti masīvā, tiek rakstīti burtu pa burtam ar lielajiem burtiem. Lai piekļūtu burtiem, izmanto masīva indeksa lauku (kvadrātiekavas):
#include <stdio.h>
int main() {
char* sentences[3];
sentences[0] = "Hello, this is the first sentence.\n";
sentences[1] = "This is the second sentence.\n";
sentences[2] = "And now there are three.\n";
printf("Original sentences:\n\n");
for(int i = 0; i < 3; i++) {
printf("%s", sentences[i]);
}
printf("\nChanged sentences:\n\n");
for(int i = 0; i < 3; i++) {
int j = 0;
while(sentences[i][j] != '\n') {
if(sentences[i][j] >= 'a' && sentences[i][j] <= 'z') {
printf("%c", sentences[i][j] - 0x20);
} else {
printf("%c", sentences[i][j]);
}
j++;
}
printf("\n");
}
}
/*
Output:
Original sentences:
Hello, this is the first sentence.
This is the second sentence.
And now there are three.
Changed sentences:
HELLO, THIS IS THE FIRST SENTENCE.
THIS IS THE SECOND SENTENCE.
AND NOW THERE ARE THREE.
*/c