logo

Dynamic Array i C

Dynamiske arrays er en kraftfuld datastruktur i programmering, der giver mulighed for skabe og manipulere arrays af varierende størrelse under kørsel. I C implementeres dynamiske arrays ved hjælp af pointere og hukommelsesallokeringsfunktioner, hvilket gør dem til et værdifuldt værktøj til at optimere hukommelsesbrug og skabe effektive programmer. I denne artikel vil vi udforske konceptet med dynamiske arrays i C, deres fordele og ulemper, og hvordan man opretter og manipulerer dem.

Forståelse af dynamiske arrays

EN dynamisk array er et array, hvis størrelse kan ændres under køretid . I modsætning til statiske arrays , som har en fast størrelse, der bestemmes på kompileringstidspunktet, kan dynamiske arrays ændres efter behov. Det giver mulighed for mere fleksibilitet og bedre hukommelsesstyring, da størrelsen af ​​arrayet kan justeres, så den passer til mængden af ​​data, der lagres.

Dynamiske arrays implementeres ved hjælp af pointere og hukommelsesallokeringsfunktioner. I C er de mest almindeligt anvendte hukommelsesallokeringsfunktioner malloc() , calloc() , og realloc() . Disse funktioner giver mulighed for allokering og deallokering af hukommelse under kørsel, hvilket er nødvendigt for at skabe og manipulere dynamiske arrays.

Fordele ved Dynamic Arrays

Der er flere fordele ved at bruge dynamiske arrays i C. Nogle af de vigtigste fordele er som følger:

  1. En af de vigtigste fordele er, at de giver mulighed for bedre hukommelsesstyring. Med statiske arrays er størrelsen af ​​arrayet fast , hvilket betyder, at hukommelsen allokeres til hele arrayet på én gang. Det kan føre til spild af hukommelse, hvis arrayet ikke udnyttes fuldt ud.
  2. Med dynamiske arrays allokeres hukommelse kun efter behov, hvilket kan føre til mere effektiv hukommelsesbrug.
  3. Dynamiske arrays giver også mulighed for større fleksibilitet.
  4. Det kan være begrænsende, især hvis størrelsen af ​​arrayet skal ændres under kørsel.
  5. Dynamiske arrays gør det muligt at justere arrayets størrelse efter behov, hvilket kan gøre programmer mere alsidige og tilpasningsdygtige.

Ulemper ved Dynamic Arrays

Mens dynamiske arrays har mange fordele, har de også nogle ulemper. Nogle af de største ulemper er som følger:

javascript onload script
  1. En af de største ulemper er, at de kan være mere komplekse at implementere end statiske arrays.
  2. Dynamiske arrays kræver brug af pointer og hukommelsesallokeringsfunktioner , som kan være sværere at forstå og bruge end den simple array-syntaks for statiske arrays.
  3. Dynamiske arrays kan også være langsommere end statiske arrays. Fordi hukommelsesallokering og deallokering er involveret, er der en overheadomkostning forbundet med at bruge dynamiske arrays. Disse overheadomkostninger kan i nogle tilfælde gøre dynamiske arrays langsommere end statiske arrays.

Oprettelse af dynamiske arrays i C

For at skabe et dynamisk array i C, skal vi bruge hukommelsesallokeringsfunktioner at allokere hukommelse til arrayet. De mest almindeligt anvendte hukommelsesallokeringsfunktioner i C er malloc(), calloc() , og realloc() . Her er et eksempel på, hvordan man opretter et dynamisk array ved hjælp af malloc():

'abc' er i tal'
 int *arr; int size = 10; arr = (int*) malloc(size * sizeof(int)); 

Forklaring:

I dette eksempel erklærer vi en pointer til et heltalsarray kaldet arr . Vi erklærer også en heltalsvariabel kaldet størrelse , som repræsenterer størrelsen af ​​det array, vi vil oprette. Derefter bruger vi malloc() funktion til at allokere hukommelse til arrayet. Det malloc() funktion tager størrelsen af ​​arrayet (in bytes ) som dets argument, så vi multiplicerer størrelsen af ​​matrixen med størrelsen af ​​et heltal (som er 4 bytes på de fleste systemer) for at få den samlede størrelse i bytes.

Manipulering af dynamiske arrays i C

Når vi har oprettet et dynamisk array i C, kan vi manipulere det ligesom ethvert andet array. Vi kan få adgang til individuelle elementer i arrayet ved hjælp af array-syntaks:

 arr[0] = 5; 

I dette eksempel sætter vi det første element i arrayet til 5 .

Vi kan også bruge sløjfer at iterere over arrayet:

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

I dette eksempel erklærer vi en ny heltalsvariabel kaldet ny_størrelse , som repræsenterer den nye størrelse af arrayet. Derefter bruger vi realloc() funktion for at ændre størrelsen på arrayet. Det realloc() funktion tager markøren til den originale hukommelsesblok (i dette tilfælde, arr ) og ny størrelse af hukommelsesblokken (i bytes ). Vi multiplicerer ny størrelse af arrayet af størrelse af en heltal for at få den samlede størrelse i bytes.

Det er vigtigt at bemærke, at når vi ændrer størrelsen på et dynamisk array vha realloc() , vil alle eksisterende data i arrayet blive bevaret. Hvis den nye størrelse af arrayet er større end den oprindelige størrelse, vil de nye elementer blive uninitialiseret.

For at frigøre den hukommelse, der bruges af et dynamisk array i C, kan vi bruge gratis() fungere. Det gratis() funktionen tager en pointer til den hukommelsesblok, der blev tildelt vha malloc() , calloc() , eller realloc() . Her er et eksempel på, hvordan man frigør den hukommelse, der bruges af et dynamisk array:

tilfældigt tal c-kode
 free(arr); 

I dette eksempel bruger vi free() funktion for at frigøre den hukommelse, der bruges af det dynamiske array arr . Det er vigtigt at bemærke, at når vi har frigivet den hukommelse, der bruges af et dynamisk array, bør vi ikke forsøge at få adgang til elementerne i arrayet.

Nogle flere eksempler på brug af dynamiske arrays i C:

Tilføjelse af elementer til et dynamisk array:

aws sns

En af de vigtigste fordele ved at bruge et dynamisk array er evnen til at tilføje elementer til arrayet efter behov. Her er et eksempel på, hvordan man tilføjer et element til et dynamisk array:

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

Forklaring:

I dette eksempel opretter vi først et dynamisk array arr af størrelse 5 bruger malloc() fungere. Derefter indstiller vi hvert element i arrayet til dets indeks ved hjælp af en for sløjfe . For at tilføje et nyt element til arrayet øger vi størrelsen af ​​arrayet med én og bruger realloc() funktion for at ændre størrelsen på arrayet. Vi indstiller værdien af ​​det sidste element i arrayet til den aktuelle værdi af jeg . Til sidst udskriver vi indholdet af arrayet og frigør hukommelsen, der bruges af arrayet.

Ændre størrelsen på et dynamisk array

En anden fordel ved at bruge et dynamisk array er muligheden for at ændre størrelsen på arrayet efter behov. Her er et eksempel på, hvordan man ændrer størrelsen på et dynamisk array:

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

Forklaring:

I dette eksempel opretter vi først et dynamisk array arr af størrelse 5 bruger malloc() funktion . Derefter indstiller vi hvert element i arrayet til dets indeks ved hjælp af en for sløjfe . For at ændre størrelsen på arrayet sætter vi værdien for størrelse til 10 og bruge realloc() funktion til at ændre størrelsen på arrayet. Derefter indstiller vi værdien af ​​de nye elementer i arrayet ved hjælp af en anden for loop. Til sidst udskriver vi indholdet af arrayet og frigør hukommelsen, der bruges af arrayet.

Konklusion

Dynamiske arrays er en kraftfuld datastruktur i programmering, der giver mulighed for oprettelse og manipulation af arrays af varierende størrelse under kørsel. I C implementeres dynamiske arrays ved hjælp af pointere og hukommelsesallokeringsfunktioner, hvilket gør dem til et værdifuldt værktøj til at optimere hukommelsesbrug og skabe effektive programmer.

Mens dynamiske arrays har mange fordele, de har også nogle ulemper. Dynamiske arrays kan være mere komplekse at implementere end statiske arrays og kan i nogle tilfælde være langsommere. Fleksibiliteten og effektiviteten af ​​dynamiske arrays gør dem imidlertid til et værdifuldt værktøj til mange programmeringsopgaver.

konverter int til streng

For at skabe og manipulere dynamiske arrays i C skal vi bruge hukommelsesallokeringsfunktioner til at allokere og deallokere hukommelse under kørsel. De mest almindeligt anvendte hukommelsesallokeringsfunktioner i C er malloc() , calloc() , og realloc() . Det er vigtigt at styre hukommelsesforbruget korrekt, når du arbejder med dynamiske arrays for at undgå hukommelseslækager og andre hukommelsesrelaterede problemer.