آرايه چيست؟ آرايه به مجموعهاي از عناصر گفته ميشود که از يک نوع باشند و يک نام واحد داشتهباشند. بگذاريد با مثال اين تعريف را بيان کنيم؛ فرض کنيد ميخواهيم فهرستي از نمرات دانشجويان يک کلاس را داشته باشيم. يک راه اين است که به ازاي هر دانشجو يک متغير تعريف کنيم اما آيا اين راه منطقي است؟ جواب خير است. اينجا است که بحث آرايهها مطرح ميشود چون نمرات همه دانشجويان از يک نوع است. ما ميتوانيم يک مجموع از نوع عدد درست کرده و نمرات دانشجويان را درون آن قرار دهيم. به اين مجموعه آرايه گفته ميشود. در زبان C آرايهها بهصورت زير تعريف ميشوند: double scores[10]; int ids[200]; char string[20]; كه كليدواژگان double، int و char نوع داهاي عناصر آرايه را نشان ميدهند، scores، idsو string نام دلخواه آرايه هستند و اعداد درون براكت نيز طول آرايه را نمايش ميدهند. نکته: آرايهها در زبانهاي خانواده C مانند ++ C، براي دسترسي به عناصر آرايه از انديس آنها استفاده ميکنيم بهطور مثال براي گرفتن مقدار عنصر اول آرايه بهصورت زير مينويسيم: Array_variable[0] مقداردهي اوليه به آرايه، براي اين كار مقاديري که بايد در آرايه قرار داده شود را داخل {} جلوي تعريف آرايه مينويسيم. بهعنوان مثال: Int x[4] = {1,2,3,4}; Int y[] = {1,2,3,4}; هر دو آرايه طولشان 4 است و مقدارهاي عناصر آنها برابر است. دسترسي به عناصر آرايه بهصورت کلي براي دسترسي به عناصر آرايه از عملگر [] استفاده ميشود. حال وقتي يک آرايه را تعريف ميکنيم، چه اتفاقي ميافتد؟ مثلا فرض کنيد آرايهاي بهصورت [ خب چطور وقتي ما ميگوييم در بحث اشارهگرها گفته شد که ميتوانيم با استفاده از عملگر ++ اشارهگر را به جلو حرکت دهيم يا با استفاده از عملگر + بگوييم که اشارهگر به چند خانه جلوتر اشاره کند. مثلا بنويسيم ptrx+ حال اگر آرايه را يک اشارهگر در نظر بگيريم ميتوان راحت به خانههاي مختلف آن دسترسي داشت.پس متغير a در آرايه تعريف شده بالا يک اشارهگر از نوع int است که ميتوان با حرکت دادن آن به محتويات خانههاي مختلف آن دسترسي پيدا کرد.پس مشکلات استفاده از آرايه گاهي دادههاي شما زياد است و سيستمعامل نميتواند آن مقدار خانه پشت سر هم را اختصاص دهد يا اينکه ممکن است در عملکرد برنامههاي ديگر خلل ايجاد شود و چون طول آرايهها ثابت است نميتوانيم به هر ميزان که خواستيم آرايه تعريف کنيم. از طرفي ممکن است ما ندانيم واقعا به چه مقدار عنصر آرايه نياز داريم. در واقع آرايه يک عنصر استاتيک است. چگونه مشکل آرايه ايستا را حل کنيم؟ براي حل اين مشکل بايد يک آرايه بهصورت پويا (آرايه پويا آرايهاي است که طول آن مشخص نيست و در هر لحظه ميتوان طول آنرا تغيير داد) تعريف کنيم. اما چگونه؟ براي تعريف آرايه پويا از اشارهگرها استفاده ميکنيم. براي اين کار با تابعي بهنام malloc آشنا ميشويم. تعريف اين تابع بهصورت زير است: Void* malloc(size_t size); اين تابع چه کار ميکند؟ اين تابع به اندازه size_t حافظه اشغال ميکند سپس نشاني اولين خانه از حافظه اشغال شده را برميگرداند. توجه داشته باشيد که مقدار برگشتي تابع int* ptrx = (int*)malloc(sizeof(int)*10); خب تا اينجا که فرقي با آرايه معمولي نداشت حال ما ميتوانيم اندازه حافظهاي که ptrx به آن اشاره ميکند را افزايش دهيم. براي اين کار از تابع reallocکه تعريف آن بهصورت زير است: Void* realloc(void* ptr,size_t newsize); مقدار ptrx را طوري تغيير دهيد که به 20 خانه از حافظه اشاره کند. ptrx = (int*)realloc(ptrx,sizeof(int)*20); اميربهاالدين سبطالشيخ