logo

Dinaminis masyvas C

Dinaminiai masyvai yra galinga duomenų struktūra programuojant, kuri leidžia kuriant ir manipuliuojant įvairaus dydžio matricos vykdymo metu. C kalboje dinaminiai masyvai įgyvendinami naudojant rodykles ir atminties paskirstymo funkcijas, todėl jie yra vertingas įrankis optimizuojant atminties naudojimą ir kuriant efektyvias programas. Šiame straipsnyje mes išnagrinėsime dinaminių masyvų C sąvoką, jų pranašumus ir trūkumus bei kaip jas kurti ir valdyti.

Dinaminių masyvų supratimas

A dinaminis masyvas yra masyvas, kurio dydis gali būti keičiamas vykdymo laikas . Skirtingai nei statiniai masyvai , kurių dydis nustatomas kompiliavimo metu, dinaminių masyvų dydį galima keisti pagal poreikį. Tai suteikia daugiau lankstumo ir geresnį atminties valdymą, nes masyvo dydį galima reguliuoti, kad atitiktų saugomų duomenų kiekį.

Dinaminiai masyvai įgyvendinami naudojant rodykles ir atminties paskirstymo funkcijas. C kalboje dažniausiai naudojamos atminties paskirstymo funkcijos malloc () , calloc() , ir realloc () . Šios funkcijos leidžia paskirstyti ir atlaisvinti atmintį vykdymo metu, o tai būtina kuriant ir manipuliuojant dinaminiais masyvais.

Dinaminių masyvų pranašumai

Dinaminių masyvų naudojimas C kalboje turi keletą privalumų. Kai kurie pagrindiniai pranašumai yra šie:

  1. Vienas iš pagrindinių privalumų yra tai, kad jie leidžia geriau valdyti atmintį. Naudojant statinius masyvus, masyvo dydis yra fiksuotas , o tai reiškia, kad atmintis paskirstoma visam masyvui iš karto. Jei masyvas nėra visiškai išnaudotas, atmintis gali būti švaistoma.
  2. Naudojant dinaminius masyvus, atmintis paskirstoma tik tiek, kiek reikia, todėl atmintis gali būti naudojama efektyviau.
  3. Dinaminiai masyvai taip pat suteikia daugiau lankstumo.
  4. Tai gali būti ribojanti, ypač jei vykdymo metu reikia keisti masyvo dydį.
  5. Dinaminiai masyvai leidžia pagal poreikį koreguoti masyvo dydį, todėl programos gali būti universalesnės ir pritaikomos.

Dinaminių masyvų trūkumai

Nors dinaminės matricos turi daug privalumų, jos turi ir tam tikrų trūkumų. Kai kurie pagrindiniai trūkumai yra šie:

kas yra vartotojo vardas
  1. Vienas iš pagrindinių trūkumų yra tai, kad juos įgyvendinti gali būti sudėtingiau nei statinius.
  2. Dinaminiams masyvams reikia naudoti rodyklės ir atminties paskirstymo funkcijos , kurią suprasti ir naudoti gali būti sunkiau nei paprastą statinių masyvų sintaksę.
  3. Dinaminiai masyvai taip pat gali būti lėtesni nei statiniai. Kadangi tai susiję su atminties paskirstymu ir atskyrimu, dinaminių masyvų naudojimas yra susijęs su pridėtinėmis sąnaudomis. Dėl šios pridėtinės kainos kai kuriais atvejais dinaminiai masyvai gali būti lėtesni nei statiniai.

Dinaminių masyvų kūrimas C

Norėdami sukurti dinaminį masyvą C, turime naudoti atminties paskirstymo funkcijos paskirstyti atmintį masyvei. Dažniausiai naudojamos atminties paskirstymo funkcijos C yra malloc(), calloc() , ir realloc () . Štai pavyzdys, kaip sukurti dinaminį masyvą naudojant malloc ():

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

Paaiškinimas:

Šiame pavyzdyje mes deklaruojame rodyklę į sveikųjų skaičių masyvą, vadinamą arr . Taip pat deklaruojame sveikąjį kintamąjį, vadinamą dydis , kuris nurodo masyvo, kurį norime sukurti, dydį. Po to mes naudojame malloc () funkcija paskirstyti atmintį masyvei. The malloc () funkcija užima masyvo dydį (in baitų ) kaip argumentą, todėl masyvo dydį padauginame iš sveikojo skaičiaus dydžio (kuris yra 4 baitai daugumoje sistemų), kad gautumėte bendrą dydį baitais.

Manipuliavimas dinaminiais masyvais C

Sukūrę dinaminį masyvą C, galime juo manipuliuoti kaip ir bet kuriuo kitu masyvu. Atskirus masyvo elementus galime pasiekti naudodami masyvo sintaksę:

 arr[0] = 5; 

Šiame pavyzdyje mes nustatome pirmąjį masyvo elementą į 5 .

Taip pat galime naudoti kilpos kartoti per masyvą:

 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;>

Šiame pavyzdyje deklaruojame naują sveikojo skaičiaus kintamąjį, vadinamą naujas_dydis , kuris rodo naują masyvo dydį. Po to mes naudojame realloc() funkcija norėdami pakeisti masyvo dydį. The realloc() funkcija perkelia žymeklį į pradinį atminties bloką (šiuo atveju arr ) ir naujas dydis atminties bloko (in baitų ). Mes padauginame naujas dydis masyvo pagal dydis iš an sveikasis skaičius norėdami gauti bendrą dydį baitais.

Svarbu pažymėti, kad kai keičiame dinaminio masyvo dydį naudojant realloc () , visi masyve esantys duomenys bus išsaugoti. Jei naujas masyvo dydis yra didesnis nei pradinis dydis, nauji elementai bus neinicializuoti.

Norėdami atlaisvinti C dinaminio masyvo naudojamą atmintį, galime naudoti Laisvas() funkcija. The Laisvas() funkcija perkelia žymeklį į atminties bloką, kuris buvo paskirtas naudojant malloc () , calloc() , arba realloc () . Štai pavyzdys, kaip atlaisvinti dinaminio masyvo naudojamą atmintį:

java stygų palyginimas
 free(arr); 

Šiame pavyzdyje mes naudojame free() funkcija atlaisvinti dinaminio masyvo naudojamą atmintį arr . Svarbu pažymėti, kad atlaisvinus dinaminio masyvo naudojamą atmintį, neturėtume bandyti pasiekti masyvo elementų.

Dar keletas dinaminių masyvų naudojimo C programoje pavyzdžių:

Elementų įtraukimas į dinaminį masyvą:

Vienas iš pagrindinių dinaminio masyvo naudojimo pranašumų yra galimybė prireikus pridėti elementų į masyvą. Štai pavyzdys, kaip pridėti elementą į dinaminį masyvą:

 #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;>

Paaiškinimas:

java galiojantys identifikatoriai

Šiame pavyzdyje pirmiausia sukuriame dinaminį masyvą arr dydžio 5 naudojant malloc () funkcija. Po to kiekvienam masyvo elementui nustatome jo indeksą naudodami a už kilpą . Norėdami į masyvą įtraukti naują elementą, padidiname masyvo dydį vienu ir naudojame realloc() funkcija norėdami pakeisti masyvo dydį. Paskutinio masyvo elemento vertę nustatome į dabartinę reikšmę i . Galiausiai išspausdiname masyvo turinį ir atlaisviname masyvo naudojamą atmintį.

Dinaminio masyvo dydžio keitimas

Kitas dinaminio masyvo naudojimo pranašumas yra galimybė prireikus pakeisti masyvo dydį. Štai pavyzdys, kaip pakeisti dinaminio masyvo dydį:

 #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;>

Paaiškinimas:

ką reiškia google

Šiame pavyzdyje pirmiausia sukuriame dinaminį masyvą arr dydžio 5 naudojant malloc() funkcija . Po to kiekvienam masyvo elementui nustatome jo indeksą naudodami a už kilpą . Norėdami pakeisti masyvo dydį, nustatome dydžio reikšmę 10 ir naudokite realloc () funkcija pakeisti masyvo dydį. Po to mes nustatome naujų masyvo elementų reikšmes naudodami kitą kilpą. Galiausiai išspausdiname masyvo turinį ir atlaisviname masyvo naudojamą atmintį.

Išvada

Dinaminiai masyvai yra galinga duomenų struktūra programuojant, leidžianti kurti ir valdyti įvairaus dydžio masyvus vykdymo metu. C kalboje dinaminiai masyvai įgyvendinami naudojant rodykles ir atminties paskirstymo funkcijas, todėl jie yra vertingas įrankis optimizuojant atminties naudojimą ir kuriant efektyvias programas.

Nors dinaminiai masyvai turi daug privalumų, turi ir trūkumų. Dinaminius masyvus įgyvendinti gali būti sudėtingiau nei statinius, o kai kuriais atvejais jie gali veikti lėčiau. Tačiau dinaminių masyvų lankstumas ir efektyvumas daro juos vertingu įrankiu daugeliui programavimo užduočių.

Norėdami sukurti ir valdyti dinaminius masyvus C programoje, turime naudoti atminties paskirstymo funkcijas, kad paskirstytume ir pašalintume atmintį vykdymo metu. Dažniausiai naudojamos atminties paskirstymo funkcijos C yra malloc () , calloc() , ir realloc () . Svarbu tinkamai valdyti atminties naudojimą dirbant su dinaminiais masyvais, kad būtų išvengta atminties nutekėjimo ir kitų su atmintimi susijusių problemų.