logo

Dynamische array in C

Dynamische arrays zijn een krachtige datastructuur in programmeren die dit mogelijk maakt creëren En manipuleren arrays van verschillende grootte tijdens runtime. In C worden dynamische arrays geïmplementeerd met behulp van pointers en geheugentoewijzingsfuncties, waardoor ze een waardevol hulpmiddel zijn voor het optimaliseren van geheugengebruik en het maken van efficiënte programma's. In dit artikel zullen we het concept van dynamische arrays in C onderzoeken, hun voor- en nadelen, en hoe je ze kunt maken en manipuleren.

Dynamische arrays begrijpen

A dynamische reeks is een array waarvan de grootte kan worden gewijzigd tijdens looptijd . in tegenstelling tot statische arrays , die een vaste grootte hebben die tijdens het compileren wordt bepaald, kunnen dynamische arrays indien nodig worden vergroot of verkleind. Het zorgt voor meer flexibiliteit en beter geheugenbeheer, omdat de grootte van de array kan worden aangepast aan de hoeveelheid gegevens die wordt opgeslagen.

Dynamische arrays worden geïmplementeerd met behulp van pointers en geheugentoewijzingsfuncties. In C zijn de meest gebruikte geheugentoewijzingsfuncties malloc() , calloc() , En realloc() . Deze functies maken de toewijzing en de toewijzing van geheugen tijdens runtime mogelijk, wat nodig is voor het maken en manipuleren van dynamische arrays.

Voordelen van dynamische arrays

Er zijn verschillende voordelen verbonden aan het gebruik van dynamische arrays in C. Enkele van de belangrijkste voordelen zijn:

  1. Een van de belangrijkste voordelen is dat ze een beter geheugenbeheer mogelijk maken. Bij statische arrays is de grootte van de array: vast , wat betekent dat geheugen in één keer aan de hele array wordt toegewezen. Het kan leiden tot geheugenverspilling als de array niet volledig wordt benut.
  2. Bij dynamische arrays wordt geheugen alleen toegewezen als dat nodig is, wat kan leiden tot efficiënter geheugengebruik.
  3. Dynamische arrays zorgen ook voor grotere flexibiliteit.
  4. Dit kan beperkend zijn, vooral als de grootte van de array tijdens runtime moet veranderen.
  5. Met dynamische arrays kan de grootte van de array indien nodig worden aangepast, waardoor programma's veelzijdiger en aanpasbaarder kunnen worden.

Nadelen van dynamische arrays

Hoewel dynamische arrays veel voordelen hebben, hebben ze ook enkele nadelen. Enkele van de belangrijkste nadelen zijn als volgt:

kwartaal in bedrijf
  1. Een van de belangrijkste nadelen is dat ze complexer te implementeren kunnen zijn dan statische arrays.
  2. Voor dynamische arrays is het gebruik van aanwijzingen En functies voor geheugentoewijzing , wat moeilijker te begrijpen en te gebruiken kan zijn dan de eenvoudige array-syntaxis van statische arrays.
  3. Dynamische arrays kunnen ook langzamer zijn dan statische arrays. Omdat er sprake is van geheugenallocatie en -deallocatie, zijn er overheadkosten verbonden aan het gebruik van dynamische arrays. Deze overheadkosten kunnen ervoor zorgen dat dynamische arrays in sommige gevallen langzamer zijn dan statische arrays.

Dynamische arrays maken in C

Om een ​​dynamische array in C te maken, moeten we gebruiken functies voor geheugentoewijzing om geheugen toe te wijzen aan de array. De meest gebruikte geheugentoewijzingsfuncties in C zijn malloc(), calloc() , En realloc() . Hier is een voorbeeld van hoe je een dynamische array maakt met malloc():

'abc' is in cijfers'
 int *arr; int size = 10; arr = (int*) malloc(size * sizeof(int)); 

Uitleg:

In dit voorbeeld declareren we een pointer naar een integer-array genaamd arr . We declareren ook een integer-variabele genaamd maat , wat de grootte vertegenwoordigt van de array die we willen maken. Daarna gebruiken we de malloc() functie om geheugen voor de array toe te wijzen. De malloc() functie neemt de grootte van de array aan (in bytes ) als argument, dus vermenigvuldigen we de grootte van de array met de grootte van een geheel getal (dat wil zeggen 4 bytes op de meeste systemen) om de totale grootte in bytes te krijgen.

Dynamische arrays manipuleren in C

Zodra we een dynamische array in C hebben gemaakt, kunnen we deze net als elke andere array manipuleren. We hebben toegang tot individuele elementen van de array met behulp van de array-syntaxis:

 arr[0] = 5; 

In dit voorbeeld stellen we het eerste element van de array in op 5 .

Wij kunnen ook gebruiken lussen om over de array te itereren:

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

In dit voorbeeld declareren we een nieuwe integer-variabele met de naam nieuwe_grootte , wat de nieuwe grootte van de array vertegenwoordigt. Daarna gebruiken we de realloc()-functie om het formaat van de array te wijzigen. De realloc()-functie brengt de pointer naar het originele geheugenblok (in dit geval arr ) en de nieuwe maat van het geheugenblok (in bytes ). Wij vermenigvuldigen de nieuwe maat van de array door de maat van een geheel getal om de totale grootte in bytes te krijgen.

Het is belangrijk op te merken dat wanneer we het formaat van een dynamische array wijzigen met behulp van realloc() , blijven alle bestaande gegevens in de array behouden. Als de nieuwe grootte van de array groter is dan de oorspronkelijke grootte, worden de nieuwe elementen niet geïnitialiseerd.

decodeer base64 javascript

Om het geheugen vrij te maken dat wordt gebruikt door een dynamische array in C, kunnen we de vrij() functie. De vrij() functie neemt een verwijzing naar het geheugenblok dat is toegewezen met behulp van malloc() , calloc() , of realloc() . Hier is een voorbeeld van hoe u het geheugen vrijmaakt dat door een dynamische array wordt gebruikt:

 free(arr); 

In dit voorbeeld gebruiken we de gratis() functie om het geheugen vrij te maken dat door de dynamische array wordt gebruikt arr . Het is belangrijk op te merken dat zodra we het geheugen hebben vrijgemaakt dat door een dynamische array wordt gebruikt, we niet mogen proberen toegang te krijgen tot de elementen van de array.

Nog enkele voorbeelden van het gebruik van dynamische arrays in C:

Elementen toevoegen aan een dynamische array:

Een van de belangrijkste voordelen van het gebruik van een dynamische array is de mogelijkheid om indien nodig elementen aan de array toe te voegen. Hier is een voorbeeld van hoe u een element aan een dynamische array kunt toevoegen:

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

Uitleg:

Java-tekenreeks in array

In dit voorbeeld maken we eerst een dynamische array arr van grootte 5 de ... gebruiken malloc() functie. Daarna stellen we elk element van de array in op de index met behulp van a for loop . Om een ​​nieuw element aan de array toe te voegen, verhogen we de grootte van de array met één en gebruiken we de realloc()-functie om het formaat van de array te wijzigen. We stellen de waarde van het laatste element in de array in op de huidige waarde van i . Ten slotte drukken we de inhoud van de array af en maken we het geheugen vrij dat door de array wordt gebruikt.

Het formaat van een dynamische array wijzigen

Een ander voordeel van het gebruik van een dynamische array is de mogelijkheid om de grootte van de array naar behoefte aan te passen. Hier is een voorbeeld van hoe u de grootte van een dynamische array kunt wijzigen:

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

Uitleg:

Java-tekenreeks naar int

In dit voorbeeld maken we eerst een dynamische array arr van grootte 5 de ... gebruiken malloc()-functie . Daarna stellen we elk element van de array in op de index met behulp van a for loop . Om het formaat van de array te wijzigen, stellen we de waarde van size in op 10 en gebruik de realloc() functie om de grootte van de array te wijzigen. Daarna stellen we de waarde van de nieuwe elementen in de array in met behulp van een andere for-lus. Ten slotte drukken we de inhoud van de array af en maken we het geheugen vrij dat door de array wordt gebruikt.

Conclusie

Dynamische arrays zijn een krachtige datastructuur in het programmeren die de creatie en manipulatie van arrays van verschillende groottes tijdens runtime mogelijk maakt. In C worden dynamische arrays geïmplementeerd met behulp van pointers en geheugentoewijzingsfuncties, waardoor ze een waardevol hulpmiddel zijn voor het optimaliseren van geheugengebruik en het maken van efficiënte programma's.

Terwijl dynamische arrays hebben veel voordelen, maar ook enkele nadelen. Dynamische arrays kunnen complexer zijn om te implementeren dan statische arrays en kunnen in sommige gevallen langzamer zijn. De flexibiliteit en efficiëntie van dynamische arrays maken ze echter tot een waardevol hulpmiddel voor veel programmeertaken.

Om dynamische arrays in C te maken en te manipuleren, moeten we geheugentoewijzingsfuncties gebruiken om geheugen toe te wijzen en de toewijzing ervan ongedaan te maken tijdens runtime. De meest gebruikte geheugentoewijzingsfuncties in C zijn malloc() , calloc() , En realloc() . Het is belangrijk om het geheugengebruik goed te beheren bij het werken met dynamische arrays om geheugenlekken en andere geheugengerelateerde problemen te voorkomen.