logo

Matriu dinàmic en C

Arrays dinàmics són una poderosa estructura de dades en programació que permet creant i manipulant matrius de diferents mides durant el temps d'execució. En C, les matrius dinàmiques s'implementen mitjançant punters i funcions d'assignació de memòria, cosa que els converteix en una valuosa eina per optimitzar l'ús de la memòria i crear programes eficients. En aquest article, explorarem el concepte de matrius dinàmiques en C, els seus avantatges i desavantatges, i com crear-los i manipular-los.

Entendre les matrius dinàmiques

A matriu dinàmic és una matriu la mida de la qual es pot canviar durant temps d'execució . A diferència matrius estàtiques , que tenen una mida fixa que es determina en temps de compilació, les matrius dinàmiques es poden redimensionar segons sigui necessari. Permet més flexibilitat i una millor gestió de la memòria, ja que la mida de la matriu es pot ajustar per adaptar-se a la quantitat de dades que s'emmagatzemen.

Les matrius dinàmiques s'implementen mitjançant punters i funcions d'assignació de memòria. En C, les funcions d'assignació de memòria més utilitzades són malloc() , calloc() , i realloc() . Aquestes funcions permeten l'assignació i desassignació de memòria durant el temps d'execució, que és necessària per crear i manipular matrius dinàmiques.

Avantatges de les matrius dinàmiques

Hi ha diversos avantatges en utilitzar matrius dinàmiques en C. Alguns dels principals avantatges són els següents:

  1. Un dels principals avantatges és que permeten una millor gestió de la memòria. Amb matrius estàtiques, la mida de la matriu és fixat , el que significa que s'assigna memòria per a tota la matriu alhora. Pot provocar un malbaratament de memòria si la matriu no s'utilitza completament.
  2. Amb les matrius dinàmiques, la memòria només s'assigna segons sigui necessari, cosa que pot conduir a un ús més eficient de la memòria.
  3. Les matrius dinàmiques també permeten una major flexibilitat.
  4. Pot ser limitant, especialment si la mida de la matriu ha de canviar durant el temps d'execució.
  5. Les matrius dinàmiques permeten ajustar la mida de la matriu segons sigui necessari, cosa que pot fer que els programes siguin més versàtils i adaptables.

Inconvenients de les matrius dinàmiques

Tot i que les matrius dinàmiques tenen molts avantatges, també tenen alguns desavantatges. Alguns dels principals desavantatges són els següents:

cicle de vida sdlc
  1. Un dels principals desavantatges és que poden ser més complexes d'implementar que les matrius estàtiques.
  2. Les matrius dinàmiques requereixen l'ús de punters i funcions d'assignació de memòria , que pot ser més difícil d'entendre i utilitzar que la simple sintaxi de matrius de matrius estàtiques.
  3. Les matrius dinàmiques també poden ser més lentes que les matrius estàtiques. Com que hi ha l'assignació i la desassignació de memòria, hi ha un cost general associat a l'ús de matrius dinàmiques. Aquest cost general pot fer que les matrius dinàmiques siguin més lentes que les matrius estàtiques en alguns casos.

Creació de matrius dinàmiques en C

Per crear una matriu dinàmica en C, hem d'utilitzar funcions d'assignació de memòria per assignar memòria per a la matriu. Les funcions d'assignació de memòria més utilitzades en C són malloc(), calloc() , i realloc() . Aquí teniu un exemple de com crear una matriu dinàmica mitjançant malloc():

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

Explicació:

En aquest exemple, declarem un punter a una matriu d'enters anomenat arr . També declarem una variable entera anomenada mida , que representa la mida de la matriu que volem crear. Després d'això, fem servir el malloc() funció per assignar memòria per a la matriu. El malloc() La funció pren la mida de la matriu (en bytes ) com a argument, de manera que multipliquem la mida de la matriu per la mida d'un nombre enter (que és 4 bytes a la majoria de sistemes) per obtenir la mida total en bytes.

Manipulació de matrius dinàmiques en C

Un cop hem creat una matriu dinàmica en C, podem manipular-la com qualsevol altra matriu. Podem accedir a elements individuals de la matriu mitjançant la sintaxi de la matriu:

 arr[0] = 5; 

En aquest exemple, establim el primer element de la matriu a 5 .

També podem utilitzar bucles per iterar sobre la matriu:

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

En aquest exemple, declarem una nova variable entera anomenada mida_nova , que representa la nova mida de la matriu. Després d'això, fem servir el funció realloc(). per canviar la mida de la matriu. El funció realloc(). porta el punter al bloc de memòria original (en aquest cas, arr ) i la nova mida del bloc de memòria (in bytes ). Multipliquem el nova mida de la matriu per la mida D'un enter per obtenir la mida total en bytes.

travessa de comanda prèvia

És important tenir en compte que quan canviem la mida d'una matriu dinàmica utilitzant realloc() , es conservaran les dades existents a la matriu. Si la mida nova de la matriu és més gran que la mida original, els nous elements no seran inicialitzats.

Per alliberar la memòria utilitzada per una matriu dinàmica en C, podem utilitzar el gratuït () funció. El gratuït () La funció pren un punter al bloc de memòria que s'ha assignat utilitzant malloc() , calloc() , o realloc() . Aquí teniu un exemple de com alliberar la memòria utilitzada per una matriu dinàmica:

 free(arr); 

En aquest exemple, fem servir el funció free(). per alliberar la memòria utilitzada per la matriu dinàmica arr . És important tenir en compte que un cop hem alliberat la memòria utilitzada per una matriu dinàmica, no hem d'intentar accedir als elements de la matriu.

Alguns exemples més d'ús de matrius dinàmiques en C:

Afegir elements a una matriu dinàmica:

Un dels principals avantatges d'utilitzar una matriu dinàmica és la possibilitat d'afegir elements a la matriu segons sigui necessari. Aquí teniu un exemple de com afegir un element a una matriu dinàmica:

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

Explicació:

En aquest exemple, primer creem una matriu dinàmica arr de mida 5 utilitzant el malloc() funció. Després d'això, establim cada element de la matriu al seu índex mitjançant a per bucle . Per afegir un nou element a la matriu, incrementem la mida de la matriu en un i fem servir el funció realloc(). per canviar la mida de la matriu. Establem el valor de l'últim element de la matriu al valor actual de i . Finalment, imprimim el contingut de la matriu i alliberem la memòria utilitzada per la matriu.

nucli microlític

Canviar la mida d'una matriu dinàmica

Un altre avantatge d'utilitzar una matriu dinàmica és la possibilitat de canviar la mida de la matriu segons sigui necessari. Aquí teniu un exemple de com canviar la mida d'una matriu dinàmica:

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

Explicació:

En aquest exemple, primer creem una matriu dinàmica arr de mida 5 utilitzant el funció malloc(). . Després d'això, establim cada element de la matriu al seu índex mitjançant a per bucle . Per canviar la mida de la matriu, establim el valor de mida a 10 i utilitza el realloc() funció per canviar la mida de la matriu. Després d'això, establim el valor dels nous elements de la matriu utilitzant un altre bucle for. Finalment, imprimim el contingut de la matriu i alliberem la memòria utilitzada per la matriu.

objecte de java

Conclusió

Arrays dinàmics són una potent estructura de dades en programació que permet la creació i manipulació de matrius de diferents mides durant el temps d'execució. En C, les matrius dinàmiques s'implementen mitjançant punters i funcions d'assignació de memòria, cosa que els converteix en una valuosa eina per optimitzar l'ús de la memòria i crear programes eficients.

Mentre matrius dinàmiques tenen molts avantatges, també tenen alguns inconvenients. Les matrius dinàmiques poden ser més complexes d'implementar que les matrius estàtiques i poden ser més lentes en alguns casos. Tanmateix, la flexibilitat i l'eficiència de les matrius dinàmiques els converteixen en una eina valuosa per a moltes tasques de programació.

Per crear i manipular matrius dinàmiques en C, hem d'utilitzar funcions d'assignació de memòria per assignar i desassignar memòria durant el temps d'execució. Les funcions d'assignació de memòria més utilitzades en C són malloc() , calloc() , i realloc() . És important gestionar correctament l'ús de la memòria quan es treballa amb matrius dinàmiques per evitar fuites de memòria i altres problemes relacionats amb la memòria.