Kuidas luua ja kasutada 2D-massiive C-keeles
Massiivid võimaldavad salvestada C-keeles seotud andmete kogumi, ilma et oleks vaja luua mitut muutujat. Reeglina on massiivid ühemõõtmelised, kuid neid saab laiendada mis tahes arvule mõõtmetele. Näitame teile, kuidas luua C-keeles 2D-massiive ja kuidas neid tõhusalt kasutada.
Millised on massiivide loomise põhitõed C-keeles?
Et C-keeles 2D-massiive luua ja hallata, peate tundma selle struktuuri põhitõdesid C-programmeerimiskeeles.
Sarnaselt paljude teiste keeltega on massiivid C-keeles mälublokk, kuhu saab salvestada mitu sama andmetüübi väärtust. See võimaldab salvestada ja ühendada mitu väärtust ühe muutuja nime all. Massiivi suurus peab olema teada kompileerimise ajal ja seda ei saa hiljem muuta. Järgmine koodiblokk illustreerib, kuidas luua massiive C-keeles:
int numbers1[15];
// Optionally, the saved values can be specified when they are created:
int numbers2[5] = {1, 2, 3, 4, 5};cAndmetüüp on määratud muutuja nime ees. Selles näites näitavad nurksulgudes olevad numbrid, et see muutuja ei ole üksikväärtus, vaid massiiv. Sulgudes olev täisarv näitab, kui palju selle andmetüübi elemente saab massiivi salvestada. Eespool toodud näites luuakse massiiv number1 algseadistamata. See tähendab, et väljadesse ei kirjutata mingeid väärtusi. Need saab hiljem koodis väärtustega täita.
Seevastu massiiv number2 algatatakse loomisel käsitsi. Suuremate massiivide puhul on see lähenemine aeganõudev ja tulemuseks on sageli arusaamatu kood. Seega ei ole see enamasti parim lähenemine. Tavaliselt on parem proovida massiive täita programmiliselt. Seda saab teha näiteks for-tsükliga:
int numbers3[100];
for(int i = 0; i < 100; i++) {
numbers3[i] = i + 1;
}
// Creates an array containing the integers 1 to 100.cSõltuvalt sellest, milline operatsioonisüsteem teil on, millist C-standardit kasutate ja kus olete oma programmis deklareerinud algväärtustamata muutuja, võib see muutuja sisaldada juhuslikku väärtust. See kehtib ka massiivi väljade kohta. Seetõttu on parem mitte kasutada välju, mida pole veel algväärtustatud, eriti kui neis salvestatud väärtus tõlgendatakse viitajana.
Kui massiiv on loodud, saate selle indeksit kasutada üksikute väärtuste juurdepääsuks. Oluline on märkida, et massiivid algavad indeksiga 0. Allpool olev näide näitab seda:
int numbers2[5] = {1, 2, 3, 4, 5};
numbers2[3] = numbers2[2];
printf("%d\n", numbers2[3]);
// Output: 3c2D-massiivi saab C-keeles luua, luues massiivi, mille iga väli sisaldab teist massiivi. 2D-massiivide kohta saate lisateavet järgmisest jaotisest.
Kuidas luua 2D-massiive C-keeles
C-keeles on 2D-massiivid tegelikult ühemõõtmelised massiivid. Iga väli sisaldab lihtsalt teist massiivi. 2D-massiivi võib mõista kui väärtuste tabelit või maatriksit. 2D-massiive saab luua ja täita järgmise süntaksiga:
ints_two_dimensions[10][10];
ints_two_dimensions [0][1] = 0;
ints_two_dimensions [2][1] = 2;
ints_two_dimensions [9][4] = 36;
// etc.cSiin tähistab vasakpoolses nurksulgudes olev number esimese massiivi indeksit, millele juurdepääs on. Parempoolne number tähistab teise massiivi indeksit. Mõelge neile kahele numbrile kui 2D-koordinaatidele või rea- või veerunumbritele. Nagu ühemõõtmelised massiivid, saab ka kahemõõtmelisi massiive nende loomisel algväärtustega algseadistada.
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}
}cMassiivi massiivis põhimõte ei piirdu kahe mõõtmega. Seda meetodit saab kasutada mis tahes mõõtmete arvuga massiivide loomiseks.
int ints_four_dimensions[10][10][10][10];cKuidas kasutada 2D-massiive C-keeles
Korrata 2D massiivi üle
C-keeles kasutatakse mitmemõõtmeliste andmestruktuuride loomiseks kõige sagedamini 2D-massiive (või mitmemõõtmelisi massiive). Järgmises näites on kahemõõtmeline massiiv täidetud vaheldumisi nullide ja ühtedega, et kujutada malelauad:
#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-massiivid
Kui soovite massiive osavalt kasutada, on oluline meeles pidada, et massiiv on lihtsalt viide mälus asukohale ja nii mõistab seda ka C-kompilaator. Indeks, mis määratakse üksikute väljade kirjutamisel või lugemisel, esindab nihutust massiivis suhtes baasaadressiga. Vaadake järgmist näidet, et saada parem ülevaade:
#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
}cStringid käsitletakse C-keeles samamoodi. Stringi on võimalik läbi käia nagu see oleks massiiv. Seda on näha järgmises näites, kus massiivis salvestatud kolm kirjet kirjutatakse täht-tähelt suurtähtedega. Tähtedele juurdepääsuks kasutatakse massiivi indeksivälja (nurksulgudes):
#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