logo

C의 동적 배열

동적 배열 프로그래밍에서 다음을 가능하게 하는 강력한 데이터 구조입니다. 창조 그리고 조작하다 런타임 동안 다양한 크기의 배열. C에서 동적 배열은 포인터와 메모리 할당 함수를 사용하여 구현되므로 메모리 사용을 최적화하고 효율적인 프로그램을 만드는 데 유용한 도구가 됩니다. 이 기사에서는 C의 동적 배열 개념, 장점과 단점, 생성 및 조작 방법을 살펴보겠습니다.

동적 배열 이해

동적 배열 도중에 크기가 변경될 수 있는 배열입니다. 실행 시간 . 같지 않은 정적 배열 , 컴파일 타임에 결정되는 고정 크기를 갖는 동적 배열은 필요에 따라 크기를 조정할 수 있습니다. 저장되는 데이터의 양에 맞게 배열의 크기를 조정할 수 있으므로 더 많은 유연성과 더 나은 메모리 관리가 가능합니다.

동적 배열은 포인터와 메모리 할당 함수를 사용하여 구현됩니다. C에서 가장 일반적으로 사용되는 메모리 할당 함수는 다음과 같습니다. malloc() , 콜록() , 그리고 재 할당() . 이러한 함수를 사용하면 런타임 중에 동적 배열을 생성하고 조작하는 데 필요한 메모리 할당 및 할당 해제가 가능합니다.

동적 배열의 장점

C에서 동적 배열을 사용하면 몇 가지 장점이 있습니다. 주요 장점 중 일부는 다음과 같습니다.

  1. 주요 장점 중 하나는 더 나은 메모리 관리가 가능하다는 것입니다. 정적 배열의 경우 배열 크기는 다음과 같습니다. 결정된 이는 전체 배열에 메모리가 한 번에 할당된다는 의미입니다. 어레이가 완전히 활용되지 않으면 메모리 낭비가 발생할 수 있습니다.
  2. 동적 배열을 사용하면 필요한 만큼만 메모리가 할당되므로 메모리를 더욱 효율적으로 사용할 수 있습니다.
  3. 동적 배열은 또한 더 큰 유연성을 허용합니다.
  4. 특히 런타임 중에 배열 크기를 변경해야 하는 경우에는 제한적일 수 있습니다.
  5. 동적 배열을 사용하면 필요에 따라 배열 크기를 조정할 수 있으므로 프로그램을 더욱 다양하고 적응 가능하게 만들 수 있습니다.

동적 배열의 단점

동적 배열에는 많은 장점이 있지만 몇 가지 단점도 있습니다. 주요 단점 중 일부는 다음과 같습니다.

np.히스토그램
  1. 주요 단점 중 하나는 정적 배열보다 구현이 더 복잡할 수 있다는 것입니다.
  2. 동적 배열에는 다음을 사용해야 합니다. 포인터 그리고 메모리 할당 함수 , 이는 정적 배열의 단순한 배열 구문보다 이해하고 사용하기가 더 어려울 수 있습니다.
  3. 동적 배열은 정적 배열보다 느릴 수도 있습니다. 메모리 할당 및 할당 취소가 관련되므로 동적 배열 사용과 관련된 오버헤드 비용이 있습니다. 이러한 오버헤드 비용으로 인해 경우에 따라 동적 배열이 정적 배열보다 느려질 수 있습니다.

C에서 동적 배열 만들기

C에서 동적 배열을 생성하려면 다음을 사용해야 합니다. 메모리 할당 함수 배열에 메모리를 할당합니다. C에서 가장 일반적으로 사용되는 메모리 할당 함수는 다음과 같습니다. malloc(), calloc() , 그리고 재 할당() . 다음은 malloc()을 사용하여 동적 배열을 생성하는 방법의 예입니다.

자바 arraylist 정렬
 int *arr; int size = 10; arr = (int*) malloc(size * sizeof(int)); 

설명:

이 예에서는 정수 배열에 대한 포인터를 선언합니다. 도착 . 또한 다음과 같은 정수 변수를 선언합니다. 크기 , 이는 우리가 생성하려는 배열의 크기를 나타냅니다. 그 후, 우리는 malloc() 배열에 메모리를 할당하는 함수입니다. 그만큼 malloc() 함수는 배열의 크기를 취합니다( 바이트 )를 인수로 사용하므로 배열의 크기에 정수의 크기를 곱합니다(이는 4 바이트 대부분의 시스템에서) 전체 크기를 바이트 단위로 가져옵니다.

C에서 동적 배열 조작

C에서 동적 배열을 생성한 후에는 다른 배열과 마찬가지로 이를 조작할 수 있습니다. 배열 구문을 사용하여 배열의 개별 요소에 액세스할 수 있습니다.

 arr[0] = 5; 

이 예에서는 배열의 첫 번째 요소를 다음으로 설정합니다. 5 .

우리는 또한 사용할 수 있습니다 루프 배열을 반복하려면 다음을 수행하십시오.

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

이 예에서는 다음과 같은 새로운 정수 변수를 선언합니다. new_size , 이는 배열의 새로운 크기를 나타냅니다. 그 후, 우리는 realloc() 함수 배열의 크기를 조정합니다. 그만큼 realloc() 함수 원래 메모리 블록에 대한 포인터를 가져옵니다(이 경우 도착 ) 그리고 새로운 크기 메모리 블록의 ( 바이트 ). 우리는 새로운 크기 배열의 크기 ~의 정수 전체 크기를 바이트 단위로 가져옵니다.

다음을 사용하여 동적 배열의 크기를 조정할 때 유의하는 것이 중요합니다. 재 할당() , 배열의 기존 데이터는 모두 보존됩니다. 배열의 새 크기가 원래 크기보다 크면 새 요소가 초기화되지 않습니다.

C에서 동적 배열이 사용하는 메모리를 해제하려면 다음을 사용할 수 있습니다. 무료() 기능. 그만큼 무료() 함수는 다음을 사용하여 할당된 메모리 블록에 대한 포인터를 가져옵니다. malloc() , 콜록() , 또는 재 할당() . 다음은 동적 배열에서 사용하는 메모리를 해제하는 방법의 예입니다.

오류: 메인 클래스를 찾거나 로드할 수 없습니다
 free(arr); 

이 예에서는 free() 함수 동적 배열에서 사용하는 메모리를 해제하려면 도착 . 동적 배열에서 사용하는 메모리를 해제한 후에는 배열 요소에 액세스하려고 시도해서는 안 된다는 점에 유의하는 것이 중요합니다.

C에서 동적 배열을 사용하는 몇 가지 추가 예:

동적 배열에 요소 추가:

동적 배열 사용의 주요 이점 중 하나는 필요에 따라 배열에 요소를 추가할 수 있다는 것입니다. 다음은 동적 배열에 요소를 추가하는 방법의 예입니다.

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

설명:

SQL 절

이 예에서는 먼저 동적 배열을 만듭니다. 도착 크기의 5 사용하여 malloc() 기능. 그런 다음, 배열의 각 요소를 인덱스로 설정합니다. for 루프 . 배열에 새 요소를 추가하려면 배열의 크기를 1씩 늘리고 realloc() 함수 배열의 크기를 조정합니다. 배열의 마지막 요소 값을 현재 값으로 설정합니다. . 마지막으로 배열의 내용을 인쇄하고 배열이 사용하는 메모리를 해제합니다.

동적 배열 크기 조정

동적 배열 사용의 또 다른 장점은 필요에 따라 배열의 크기를 조정할 수 있다는 것입니다. 다음은 동적 배열의 크기를 조정하는 방법의 예입니다.

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

설명:

b+ 트리

이 예에서는 먼저 동적 배열을 만듭니다. 도착 크기의 5 사용하여 malloc() 함수 . 그런 다음, 배열의 각 요소를 인덱스로 설정합니다. for 루프 . 배열의 크기를 조정하려면 크기 값을 다음과 같이 설정합니다. 10 그리고 재 할당() 배열의 크기를 조정하는 함수입니다. 그런 다음 또 다른 for 루프를 사용하여 배열의 새 요소 값을 설정합니다. 마지막으로 배열의 내용을 인쇄하고 배열이 사용하는 메모리를 해제합니다.

결론

동적 배열 런타임 중에 다양한 크기의 배열을 생성하고 조작할 수 있는 프로그래밍의 강력한 데이터 구조입니다. C에서 동적 배열은 포인터와 메모리 할당 함수를 사용하여 구현되므로 메모리 사용을 최적화하고 효율적인 프로그램을 만드는 데 유용한 도구가 됩니다.

하는 동안 동적 배열 많은 장점이 있지만 몇 가지 단점도 있습니다. 동적 배열은 정적 배열보다 구현하기가 더 복잡할 수 있으며 경우에 따라 속도가 느려질 수 있습니다. 그러나 동적 배열의 유연성과 효율성 덕분에 동적 배열은 많은 프로그래밍 작업에 유용한 도구가 됩니다.

C에서 동적 배열을 생성하고 조작하려면 런타임 중에 메모리 할당 함수를 사용하여 메모리를 할당하고 할당 해제해야 합니다. C에서 가장 일반적으로 사용되는 메모리 할당 함수는 다음과 같습니다. malloc() , 콜록() , 그리고 재 할당() . 메모리 누수 및 기타 메모리 관련 문제를 방지하려면 동적 배열로 작업할 때 메모리 사용량을 적절하게 관리하는 것이 중요합니다.