logo

المصفوفة الديناميكية في لغة C

المصفوفات الديناميكية هي بنية بيانات قوية في البرمجة تسمح بذلك خلق و التلاعب مصفوفات بأحجام مختلفة أثناء وقت التشغيل. في لغة C، يتم تنفيذ المصفوفات الديناميكية باستخدام المؤشرات ووظائف تخصيص الذاكرة، مما يجعلها أداة قيمة لتحسين استخدام الذاكرة وإنشاء برامج فعالة. في هذه المقالة، سوف نستكشف مفهوم المصفوفات الديناميكية في لغة C، ومزاياها وعيوبها، وكيفية إنشائها ومعالجتها.

فهم المصفوفات الديناميكية

أ مجموعة ديناميكية عبارة عن مصفوفة يمكن تغيير حجمها أثناء مدة العرض . على عكس صفائف ثابتة ، والتي لها حجم ثابت يتم تحديده في وقت الترجمة، يمكن تغيير حجم المصفوفات الديناميكية حسب الحاجة. فهو يسمح بمرونة أكبر وإدارة أفضل للذاكرة، حيث يمكن تعديل حجم المصفوفة ليناسب كمية البيانات المخزنة.

يتم تنفيذ المصفوفات الديناميكية باستخدام المؤشرات ووظائف تخصيص الذاكرة. في لغة C، وظائف تخصيص الذاكرة الأكثر استخدامًا هي مالوك () , كالوك () ، و إعادة تخصيص () . تسمح هذه الوظائف بتخصيص الذاكرة وإلغاء تخصيصها أثناء وقت التشغيل، وهو أمر ضروري لإنشاء المصفوفات الديناميكية ومعالجتها.

مزايا المصفوفات الديناميكية

هناك العديد من المزايا لاستخدام المصفوفات الديناميكية في لغة C. وفيما يلي بعض المزايا الرئيسية:

  1. إحدى المزايا الرئيسية هي أنها تسمح بإدارة أفضل للذاكرة. مع المصفوفات الثابتة، حجم المصفوفة هو مُثَبَّت مما يعني أنه تم تخصيص الذاكرة للمصفوفة بأكملها مرة واحدة. يمكن أن يؤدي إلى إهدار الذاكرة إذا لم يتم استخدام المصفوفة بالكامل.
  2. باستخدام المصفوفات الديناميكية، يتم تخصيص الذاكرة حسب الحاجة فقط، مما قد يؤدي إلى استخدام أكثر كفاءة للذاكرة.
  3. تسمح المصفوفات الديناميكية أيضًا بقدر أكبر من المرونة.
  4. يمكن أن يكون الأمر مقيدًا، خاصةً إذا كان حجم المصفوفة يحتاج إلى التغيير أثناء وقت التشغيل.
  5. تسمح المصفوفات الديناميكية بتعديل حجم المصفوفة حسب الحاجة، مما يجعل البرامج أكثر تنوعًا وقدرة على التكيف.

عيوب المصفوفات الديناميكية

في حين أن المصفوفات الديناميكية لها العديد من المزايا، إلا أن لها أيضًا بعض العيوب. بعض العيوب الرئيسية هي كما يلي:

قاموس ج #
  1. أحد العيوب الرئيسية هو أنها يمكن أن تكون أكثر تعقيدًا في التنفيذ من المصفوفات الثابتة.
  2. تتطلب المصفوفات الديناميكية استخدام مؤشرات و وظائف تخصيص الذاكرة ، والتي يمكن أن تكون أكثر صعوبة في الفهم والاستخدام من بناء جملة المصفوفة البسيطة للمصفوفات الثابتة.
  3. يمكن أيضًا أن تكون المصفوفات الديناميكية أبطأ من المصفوفات الثابتة. نظرًا لأن تخصيص الذاكرة وإلغاء تخصيصها متضمنان، فهناك تكلفة عامة مرتبطة باستخدام المصفوفات الديناميكية. يمكن لهذه التكلفة العامة أن تجعل المصفوفات الديناميكية أبطأ من المصفوفات الثابتة في بعض الحالات.

إنشاء صفائف ديناميكية في C

لإنشاء مصفوفة ديناميكية في لغة C، يجب علينا استخدام وظائف تخصيص الذاكرة لتخصيص الذاكرة للمصفوفة. وظائف تخصيص الذاكرة الأكثر استخدامًا في لغة C هي مالوك ()، كالوك () ، و إعادة تخصيص () . فيما يلي مثال لكيفية إنشاء مصفوفة ديناميكية باستخدام malloc():

جافا فرز قائمة الصفيف
 int *arr; int size = 10; arr = (int*) malloc(size * sizeof(int)); 

توضيح:

في هذا المثال، نعلن عن مؤشر لمصفوفة أعداد صحيحة تسمى وصول . نعلن أيضًا عن متغير عدد صحيح يسمى مقاس والذي يمثل حجم المصفوفة التي نريد إنشاءها. بعد ذلك نستخدم مالوك () وظيفة لتخصيص الذاكرة للمصفوفة. ال مالوك () تأخذ الدالة حجم المصفوفة (in بايت ) كوسيطة لها، لذلك نضرب حجم المصفوفة بحجم عدد صحيح (وهو 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 ، والذي يمثل الحجم الجديد للمصفوفة. بعد ذلك نستخدم وظيفة ريلوك (). لتغيير حجم المصفوفة. ال وظيفة ريلوك (). يأخذ المؤشر إلى كتلة الذاكرة الأصلية (في هذه الحالة، وصول ) و ال حجم جديد من كتلة الذاكرة (في بايت ). نقوم بضرب حجم جديد من المصفوفة بواسطة مقاس من عدد صحيح للحصول على الحجم الإجمالي بالبايت.

أجمل ابتسامة

من المهم ملاحظة أنه عندما نقوم بتغيير حجم مصفوفة ديناميكية باستخدام إعادة تخصيص () سيتم الاحتفاظ بأي بيانات موجودة في المصفوفة. إذا كان الحجم الجديد للمصفوفة أكبر من الحجم الأصلي، فستكون العناصر الجديدة غير مهيأة.

لتحرير الذاكرة المستخدمة بواسطة مصفوفة ديناميكية في لغة C، يمكننا استخدام حر() وظيفة. ال حر() تأخذ الوظيفة مؤشرًا إلى كتلة الذاكرة التي تم تخصيصها باستخدام مالوك () , كالوك () ، أو إعادة تخصيص () . فيما يلي مثال لكيفية تحرير الذاكرة المستخدمة بواسطة مصفوفة ديناميكية:

 free(arr); 

في هذا المثال نستخدم وظيفة مجانية (). لتحرير الذاكرة المستخدمة بواسطة المصفوفة الديناميكية وصول . من المهم أن نلاحظ أنه بمجرد تحرير الذاكرة المستخدمة بواسطة مصفوفة ديناميكية، يجب ألا نحاول الوصول إلى عناصر المصفوفة.

بعض الأمثلة الإضافية لاستخدام المصفوفات الديناميكية في لغة 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;>

توضيح:

في هذا المثال، نقوم أولاً بإنشاء مصفوفة ديناميكية وصول من الحجم 5 باستخدام مالوك () وظيفة. بعد ذلك، قمنا بتعيين كل عنصر من عناصر المصفوفة إلى فهرسه باستخدام a لحلقة . لإضافة عنصر جديد إلى المصفوفة، نقوم بزيادة حجم المصفوفة بمقدار واحد ونستخدم الأمر وظيفة ريلوك (). لتغيير حجم المصفوفة. قمنا بتعيين قيمة العنصر الأخير في المصفوفة على القيمة الحالية لـ أنا . أخيرًا، نقوم بطباعة محتويات المصفوفة وتحرير الذاكرة التي يستخدمها المصفوفة.

متى يبدأ Q2

تغيير حجم المصفوفة الديناميكية

ميزة أخرى لاستخدام المصفوفة الديناميكية هي القدرة على تغيير حجم المصفوفة حسب الحاجة. فيما يلي مثال لكيفية تغيير حجم مصفوفة ديناميكية:

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

توضيح:

في هذا المثال، نقوم أولاً بإنشاء مصفوفة ديناميكية وصول من الحجم 5 باستخدام وظيفة مالوك (). . بعد ذلك، قمنا بتعيين كل عنصر من عناصر المصفوفة إلى فهرسه باستخدام a لحلقة . لتغيير حجم المصفوفة، قمنا بتعيين قيمة الحجم إلى 10 واستخدام إعادة تخصيص () وظيفة لتغيير حجم المصفوفة. بعد ذلك، قمنا بتعيين قيمة العناصر الجديدة في المصفوفة باستخدام حلقة for أخرى. أخيرًا، نقوم بطباعة محتويات المصفوفة وتحرير الذاكرة التي يستخدمها المصفوفة.

نوع الإدراج Java

خاتمة

المصفوفات الديناميكية هي بنية بيانات قوية في البرمجة تسمح بإنشاء ومعالجة صفائف ذات أحجام مختلفة أثناء وقت التشغيل. في لغة C، يتم تنفيذ المصفوفات الديناميكية باستخدام المؤشرات ووظائف تخصيص الذاكرة، مما يجعلها أداة قيمة لتحسين استخدام الذاكرة وإنشاء برامج فعالة.

بينما المصفوفات الديناميكية لديهم العديد من المزايا، لديهم أيضا بعض العيوب. يمكن أن تكون المصفوفات الديناميكية أكثر تعقيدًا في التنفيذ من المصفوفات الثابتة ويمكن أن تكون أبطأ في بعض الحالات. ومع ذلك، فإن مرونة وكفاءة المصفوفات الديناميكية تجعلها أداة قيمة للعديد من مهام البرمجة.

لإنشاء المصفوفات الديناميكية ومعالجتها في لغة C، يجب علينا استخدام وظائف تخصيص الذاكرة لتخصيص الذاكرة وإلغاء تخصيصها أثناء وقت التشغيل. وظائف تخصيص الذاكرة الأكثر استخدامًا في لغة C هي مالوك () , كالوك () ، و إعادة تخصيص () . من المهم إدارة استخدام الذاكرة بشكل صحيح عند العمل مع المصفوفات الديناميكية لتجنب تسرب الذاكرة والمشكلات الأخرى المتعلقة بالذاكرة.