logo

Dynaaminen matriisi C:ssä

Dynaamiset taulukot ovat tehokas ohjelmoinnin tietorakenne, joka mahdollistaa luominen ja manipuloimalla erikokoisia ryhmiä ajon aikana. C:ssä dynaamiset taulukot toteutetaan osoittimilla ja muistinvarausfunktioilla, mikä tekee niistä arvokkaan työkalun muistinkäytön optimointiin ja tehokkaiden ohjelmien luomiseen. Tässä artikkelissa tutkimme C:n dynaamisten taulukoiden käsitettä, niiden etuja ja haittoja sekä niiden luomista ja käsittelyä.

Dynaamisten taulukoiden ymmärtäminen

A dynaaminen matriisi on matriisi, jonka kokoa voidaan muuttaa aikana suoritusaika . Toisin kuin staattiset taulukot , joilla on kiinteä koko, joka määritetään käännöshetkellä, dynaamisten taulukoiden kokoa voidaan muuttaa tarpeen mukaan. Se mahdollistaa enemmän joustavuutta ja paremman muistinhallinnan, koska taulukon kokoa voidaan säätää tallennettavan tiedon määrän mukaan.

Dynaamiset taulukot toteutetaan osoittimilla ja muistinvarausfunktioilla. C:ssä yleisimmin käytetyt muistinvarausfunktiot ovat malloc() , calloc() , ja realloc() . Nämä toiminnot mahdollistavat muistin varaamisen ja purkamisen ajon aikana, mikä on välttämätöntä dynaamisten taulukoiden luomiseksi ja käsittelemiseksi.

Dynaamisten taulukoiden edut

Dynaamisten taulukoiden käyttämisessä C:ssä on useita etuja. Jotkut tärkeimmistä eduista ovat seuraavat:

  1. Yksi tärkeimmistä eduista on, että ne mahdollistavat paremman muistinhallinnan. Staattisissa taulukoissa taulukon koko on korjattu , mikä tarkoittaa, että muisti varataan koko joukolle kerralla. Se voi johtaa muistin hukkaan, jos taulukkoa ei käytetä täysin.
  2. Dynaamisissa taulukoissa muistia varataan vain tarpeen mukaan, mikä voi johtaa tehokkaampaan muistin käyttöön.
  3. Dynaamiset taulukot mahdollistavat myös suuremman joustavuuden.
  4. Se voi olla rajoittava, varsinkin jos taulukon kokoa on muutettava ajon aikana.
  5. Dynaamiset taulukot mahdollistavat taulukon koon säätämisen tarpeen mukaan, mikä voi tehdä ohjelmista monipuolisempia ja mukautuvampia.

Dynaamisten taulukoiden haitat

Vaikka dynaamisilla taulukoilla on monia etuja, niillä on myös joitain haittoja. Jotkut tärkeimmistä haitoista ovat seuraavat:

henkilöstön valintakomission merkitys
  1. Yksi suurimmista haitoista on, että ne voivat olla monimutkaisempia toteuttaa kuin staattiset taulukot.
  2. Dynaamiset taulukot vaativat käytön osoittimia ja muistinvaraustoiminnot , joka voi olla vaikeampi ymmärtää ja käyttää kuin staattisten taulukoiden yksinkertainen taulukkosyntaksi.
  3. Dynaamiset taulukot voivat myös olla hitaampia kuin staattiset taulukot. Koska muistin varaus ja purkaminen ovat mukana, dynaamisten taulukoiden käyttöön liittyy yleiskustannuksia. Nämä yleiskustannukset voivat joissakin tapauksissa tehdä dynaamisista taulukoista hitaampia kuin staattiset taulukot.

Dynaamisten taulukoiden luominen C:ssä

Dynaamisen taulukon luomiseksi C:ssä meidän on käytettävä muistinvaraustoiminnot varata muistia taulukolle. Yleisimmin käytetyt muistinvarausfunktiot C:ssä ovat malloc(), calloc() , ja realloc() . Tässä on esimerkki dynaamisen taulukon luomisesta malloc()-komennolla:

java tostring
 int *arr; int size = 10; arr = (int*) malloc(size * sizeof(int)); 

Selitys:

Tässä esimerkissä ilmoitamme osoittimen kokonaislukutaulukkoon nimeltä arr . Ilmoitamme myös kokonaislukumuuttujan nimeltä koko , joka edustaa luotavan taulukon kokoa. Sen jälkeen käytämme malloc() funktion muistin varaamiseksi taulukolle. The malloc() funktio ottaa taulukon koon (in tavua ) argumenttina, joten kerromme taulukon koon kokonaisluvun koolla (joka on 4 tavua useimmissa järjestelmissä) saadaksesi kokonaiskoon tavuina.

Dynaamisten taulukoiden käsittely C:ssä

Kun olemme luoneet dynaamisen taulukon C:ssä, voimme käsitellä sitä aivan kuten mitä tahansa muuta taulukkoa. Voimme käyttää taulukon yksittäisiä elementtejä matriisin syntaksin avulla:

 arr[0] = 5; 

Tässä esimerkissä asetamme taulukon ensimmäiseksi elementiksi 5 .

Voimme myös käyttää silmukat iteroidaksesi taulukon yli:

 for (int i = 0; i<size; i++) { arr[i]="i" * 2; } < pre> <p>In this example, we use a <strong> <em>for loop</em> </strong> to set each element of the array to twice its index.</p> <p>To resize a dynamic array in C, we can use the <strong> <em>realloc()</em> </strong> function. The <strong> <em>realloc()</em> </strong> function takes two arguments: a <strong> <em>pointer</em> </strong> to the original memory block and the <strong> <em>new size</em> </strong> of the memory block. Here is an example of how to resize a dynamic array using realloc():</p> <pre> int new_size = 20; arr = (int*) realloc(arr, new_size * sizeof(int)); </pre> <p>In this example, we declare a new integer variable called <strong> <em>new_size</em> </strong> , which represents the new size of the array. After that, we use the <strong> <em>realloc() function</em> </strong> to resize the array. The <strong> <em>realloc() function</em> </strong> takes the pointer to the original memory block (in this case, <strong> <em>arr</em> </strong> ) and the <strong> <em>new size</em> </strong> of the memory block (in <strong> <em>bytes</em> </strong> ). We multiply the <strong> <em>new size</em> </strong> of the array by the <strong> <em>size</em> </strong> of an <strong> <em>integer</em> </strong> to get the total size in bytes.</p> <p>It is important to note that when we resize a dynamic array using <strong> <em>realloc()</em> </strong> , any existing data in the array will be preserved. If the new size of the array is larger than the original size, the new elements will be uninitialized.</p> <p>To free the memory used by a dynamic array in C, we can use the <strong> <em>free()</em> </strong> function. The <strong> <em>free()</em> </strong> function takes a pointer to the memory block that was allocated using <strong> <em>malloc()</em> </strong> , <strong> <em>calloc()</em> </strong> , or <strong> <em>realloc()</em> </strong> . Here is an example of how to free the memory used by a dynamic array:</p> <pre> free(arr); </pre> <p>In this example, we use the <strong> <em>free() function</em> </strong> to free the memory used by the dynamic array <strong> <em>arr</em> </strong> . It is important to note that once we have freed the memory used by a dynamic array, we should not attempt to access the elements of the array.</p> <h3>Some more examples of using dynamic arrays in C:</h3> <p> <strong>Adding Elements to a Dynamic Array:</strong> </p> <p>One of the main benefits of using a dynamic array is the ability to add elements to the array as needed. Here is an example of how to add an element to a dynamic array:</p> <pre> #include #include int main() { int size = 5; int *arr = (int*) malloc(size * sizeof(int)); int i; for(i = 0; i<size; i++) { arr[i]="i;" } add a new element to the array size++; arr="(int*)" realloc(arr, size * sizeof(int)); arr[size-1]="i;" for(i="0;" i< size; printf('%d ', arr[i]); free(arr); return 0; < pre> <p> <strong>Output:</strong> </p> <pre> 0 1 2 3 4 5 </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first create a dynamic array <strong> <em>arr</em> </strong> of size <strong> <em>5</em> </strong> using the <strong> <em>malloc()</em> </strong> function. After that, we set each element of the array to its index using a <strong> <em>for loop</em> </strong> . To add a new element to the array, we increment the size of the array by one and use the <strong> <em>realloc() function</em> </strong> to resize the array. We set the value of the last element in the array to the current value of <strong> <em>i</em> </strong> . Finally, we print the contents of the array and free the memory used by the array.</p> <h3>Resizing a Dynamic Array</h3> <p>Another advantage of using a dynamic array is the ability to resize the array as needed. Here is an example of how to resize a dynamic array:</p> <pre> #include #include int main() { int size = 5; int *arr = (int*) malloc(size * sizeof(int)); int i; for(i = 0; i<size; i++) { arr[i]="i;" } resize the array size="10;" arr="(int*)" realloc(arr, * sizeof(int)); for(i="5;" i< size; printf('%d ', arr[i]); free(arr); return 0; < pre> <p> <strong>Output:</strong> </p> <pre> 0 1 2 3 4 5 6 7 8 9 </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first create a dynamic array <strong> <em>arr</em> </strong> of size <strong> <em>5</em> </strong> using the <strong> <em>malloc() function</em> </strong> . After that, we set each element of the array to its index using a <strong> <em>for loop</em> </strong> . To resize the array, we set the value of size to <strong> <em>10</em> </strong> and use the <strong> <em>realloc()</em> </strong> function to resize the array. After that, we set the value of the new elements in the array using another for loop. Finally, we print the contents of the array and free the memory used by the array.</p> <h2>Conclusion</h2> <p> <strong> <em>Dynamic arrays</em> </strong> are a powerful data structure in programming that allow for the creation and manipulation of arrays of varying sizes during runtime. In C, dynamic arrays are implemented using pointers and memory allocation functions, making them a valuable tool for optimizing memory usage and creating efficient programs.</p> <p>While <strong> <em>dynamic arrays</em> </strong> have many advantages, they also have some disadvantages. Dynamic arrays can be more complex to implement than static arrays and can be slower in some cases. However, the flexibility and efficiency of dynamic arrays make them a valuable tool for many programming tasks.</p> <p>To create and manipulate dynamic arrays in C, we must use memory allocation functions to allocate and deallocate memory during runtime. The most commonly used memory allocation functions in C are <strong> <em>malloc()</em> </strong> , <strong> <em>calloc()</em> </strong> , and <strong> <em>realloc()</em> </strong> . It is important to properly manage memory usage when working with dynamic arrays to avoid memory leaks and other memory-related issues.</p> <hr></size;></pre></size;></pre></size;>

Tässä esimerkissä ilmoitamme uuden kokonaislukumuuttujan nimeltä uusi_koko , joka edustaa taulukon uutta kokoa. Sen jälkeen käytämme realloc()-funktio muuttaaksesi taulukon kokoa. The realloc()-funktio vie osoittimen alkuperäiseen muistilohkoon (tässä tapauksessa arr ) ja uusi koko muistilohkosta (in tavua ). Kerromme uusi koko taulukosta koko an kokonaisluku saadaksesi kokonaiskoon tavuina.

123 elokuva

On tärkeää huomata, että kun muutamme dynaamisen taulukon kokoa käyttämällä realloc() , kaikki taulukossa olevat tiedot säilytetään. Jos taulukon uusi koko on suurempi kuin alkuperäinen koko, uusia elementtejä ei alusta.

Vapauttaaksemme C:n dynaamisen taulukon käyttämän muistin, voimme käyttää vapaa() toiminto. The vapaa() -toiminto vie osoittimen muistilohkoon, joka on varattu käyttämällä malloc() , calloc() , tai realloc() . Tässä on esimerkki dynaamisen taulukon käyttämän muistin vapauttamisesta:

 free(arr); 

Tässä esimerkissä käytämme free()-funktio vapauttaaksesi dynaamisen taulukon käyttämän muistin arr . On tärkeää huomata, että kun olemme vapauttaneet dynaamisen taulukon käyttämän muistin, meidän ei pitäisi yrittää päästä käsiksi taulukon elementteihin.

Muita esimerkkejä dynaamisten taulukoiden käytöstä C:ssä:

Elementtien lisääminen dynaamiseen taulukkoon:

Yksi dynaamisen taulukon käytön tärkeimmistä eduista on kyky lisätä taulukkoon elementtejä tarpeen mukaan. Tässä on esimerkki elementin lisäämisestä dynaamiseen taulukkoon:

 #include #include int main() { int size = 5; int *arr = (int*) malloc(size * sizeof(int)); int i; for(i = 0; i<size; i++) { arr[i]="i;" } add a new element to the array size++; arr="(int*)" realloc(arr, size * sizeof(int)); arr[size-1]="i;" for(i="0;" i< size; printf(\'%d \', arr[i]); free(arr); return 0; < pre> <p> <strong>Output:</strong> </p> <pre> 0 1 2 3 4 5 </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first create a dynamic array <strong> <em>arr</em> </strong> of size <strong> <em>5</em> </strong> using the <strong> <em>malloc()</em> </strong> function. After that, we set each element of the array to its index using a <strong> <em>for loop</em> </strong> . To add a new element to the array, we increment the size of the array by one and use the <strong> <em>realloc() function</em> </strong> to resize the array. We set the value of the last element in the array to the current value of <strong> <em>i</em> </strong> . Finally, we print the contents of the array and free the memory used by the array.</p> <h3>Resizing a Dynamic Array</h3> <p>Another advantage of using a dynamic array is the ability to resize the array as needed. Here is an example of how to resize a dynamic array:</p> <pre> #include #include int main() { int size = 5; int *arr = (int*) malloc(size * sizeof(int)); int i; for(i = 0; i<size; i++) { arr[i]="i;" } resize the array size="10;" arr="(int*)" realloc(arr, * sizeof(int)); for(i="5;" i< size; printf(\'%d \', arr[i]); free(arr); return 0; < pre> <p> <strong>Output:</strong> </p> <pre> 0 1 2 3 4 5 6 7 8 9 </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first create a dynamic array <strong> <em>arr</em> </strong> of size <strong> <em>5</em> </strong> using the <strong> <em>malloc() function</em> </strong> . After that, we set each element of the array to its index using a <strong> <em>for loop</em> </strong> . To resize the array, we set the value of size to <strong> <em>10</em> </strong> and use the <strong> <em>realloc()</em> </strong> function to resize the array. After that, we set the value of the new elements in the array using another for loop. Finally, we print the contents of the array and free the memory used by the array.</p> <h2>Conclusion</h2> <p> <strong> <em>Dynamic arrays</em> </strong> are a powerful data structure in programming that allow for the creation and manipulation of arrays of varying sizes during runtime. In C, dynamic arrays are implemented using pointers and memory allocation functions, making them a valuable tool for optimizing memory usage and creating efficient programs.</p> <p>While <strong> <em>dynamic arrays</em> </strong> have many advantages, they also have some disadvantages. Dynamic arrays can be more complex to implement than static arrays and can be slower in some cases. However, the flexibility and efficiency of dynamic arrays make them a valuable tool for many programming tasks.</p> <p>To create and manipulate dynamic arrays in C, we must use memory allocation functions to allocate and deallocate memory during runtime. The most commonly used memory allocation functions in C are <strong> <em>malloc()</em> </strong> , <strong> <em>calloc()</em> </strong> , and <strong> <em>realloc()</em> </strong> . It is important to properly manage memory usage when working with dynamic arrays to avoid memory leaks and other memory-related issues.</p> <hr></size;></pre></size;>

Selitys:

Tässä esimerkissä luomme ensin dynaamisen taulukon arr kooltaan 5 käyttämällä malloc() toiminto. Tämän jälkeen asetamme jokaisen taulukon elementin hakemistoonsa käyttämällä a silmukalle . Jos haluat lisätä taulukkoon uuden elementin, lisäämme taulukon kokoa yhdellä ja käytämme realloc()-funktio muuttaaksesi taulukon kokoa. Asetamme taulukon viimeisen elementin arvon nykyiseen arvoon i . Lopuksi tulostetaan taulukon sisältö ja vapautetaan taulukon käyttämä muisti.

sivu alas näppäimistö

Dynaamisen taulukon koon muuttaminen

Toinen dynaamisen taulukon käytön etu on kyky muuttaa taulukon kokoa tarpeen mukaan. Tässä on esimerkki dynaamisen taulukon koon muuttamisesta:

 #include #include int main() { int size = 5; int *arr = (int*) malloc(size * sizeof(int)); int i; for(i = 0; i<size; i++) { arr[i]="i;" } resize the array size="10;" arr="(int*)" realloc(arr, * sizeof(int)); for(i="5;" i< size; printf(\'%d \', arr[i]); free(arr); return 0; < pre> <p> <strong>Output:</strong> </p> <pre> 0 1 2 3 4 5 6 7 8 9 </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first create a dynamic array <strong> <em>arr</em> </strong> of size <strong> <em>5</em> </strong> using the <strong> <em>malloc() function</em> </strong> . After that, we set each element of the array to its index using a <strong> <em>for loop</em> </strong> . To resize the array, we set the value of size to <strong> <em>10</em> </strong> and use the <strong> <em>realloc()</em> </strong> function to resize the array. After that, we set the value of the new elements in the array using another for loop. Finally, we print the contents of the array and free the memory used by the array.</p> <h2>Conclusion</h2> <p> <strong> <em>Dynamic arrays</em> </strong> are a powerful data structure in programming that allow for the creation and manipulation of arrays of varying sizes during runtime. In C, dynamic arrays are implemented using pointers and memory allocation functions, making them a valuable tool for optimizing memory usage and creating efficient programs.</p> <p>While <strong> <em>dynamic arrays</em> </strong> have many advantages, they also have some disadvantages. Dynamic arrays can be more complex to implement than static arrays and can be slower in some cases. However, the flexibility and efficiency of dynamic arrays make them a valuable tool for many programming tasks.</p> <p>To create and manipulate dynamic arrays in C, we must use memory allocation functions to allocate and deallocate memory during runtime. The most commonly used memory allocation functions in C are <strong> <em>malloc()</em> </strong> , <strong> <em>calloc()</em> </strong> , and <strong> <em>realloc()</em> </strong> . It is important to properly manage memory usage when working with dynamic arrays to avoid memory leaks and other memory-related issues.</p> <hr></size;>

Selitys:

Tässä esimerkissä luomme ensin dynaamisen taulukon arr kooltaan 5 käyttämällä malloc()-funktio . Tämän jälkeen asetamme jokaisen taulukon elementin hakemistoonsa käyttämällä a silmukalle . Jos haluat muuttaa taulukon kokoa, asetamme koon arvoksi 10 ja käytä realloc() toiminto muuttaa taulukon kokoa. Sen jälkeen asetamme taulukon uusien elementtien arvon käyttämällä toista for-silmukkaa. Lopuksi tulostetaan taulukon sisältö ja vapautetaan taulukon käyttämä muisti.

tostring java

Johtopäätös

Dynaamiset taulukot ovat tehokas ohjelmoinnin tietorakenne, joka mahdollistaa erikokoisten taulukoiden luomisen ja manipuloinnin ajon aikana. C:ssä dynaamiset taulukot toteutetaan osoittimilla ja muistinvarausfunktioilla, mikä tekee niistä arvokkaan työkalun muistinkäytön optimointiin ja tehokkaiden ohjelmien luomiseen.

Sillä aikaa dynaamiset taulukot niillä on monia etuja, heillä on myös joitain haittoja. Dynaamiset taulukot voivat olla monimutkaisempia toteuttaa kuin staattiset taulukot, ja ne voivat olla joissain tapauksissa hitaampia. Dynaamisten taulukoiden joustavuus ja tehokkuus tekevät niistä kuitenkin arvokkaan työkalun moniin ohjelmointitehtäviin.

Dynaamisten taulukoiden luomiseksi ja käsittelemiseksi C:ssä meidän on käytettävä muistinvarausfunktioita muistin varaamiseen ja purkamiseen ajon aikana. Yleisimmin käytetyt muistinvarausfunktiot C:ssä ovat malloc() , calloc() , ja realloc() . On tärkeää hallita muistin käyttöä oikein dynaamisten taulukoiden kanssa työskennellessäsi muistivuotojen ja muiden muistiin liittyvien ongelmien välttämiseksi.