گفتیم که آرایهها از نظر کلاس حافظه ممکن است خودکار، ایستا یا خارجی تعریف شوند، ولی نمیتوانند ثبات تعریف شوند. آرایههای از نوع خودکار، برخلاف متغیرهای خودکار ممکن است هنگام تعریف، مقدار اولیه بپذیرند.
حال باتوجه به این توضیحها میتوان شکل کلی مقداردهی اولیه به آرایهها را به صورت زیر بیان کرد.
storage-class data-type array-name [size] = {value1 , value2 , … valuem} ;
که در آن value1، valuem…value2 به ترتیب مقدار اولیه اولین، دومین،… و m اُمین عنصر آرایه را مشخص میکنند.
فرض کنید که آرایههای a، b و c به صورت زیر تعریف شدهاند.
int a[7] = {1 , 2 , 3 , 4 , 5 , 6 , 7} ;
static float b[5] = {2.5 , -3.5 , 1.25 , 12.5 , 3.14} ;
char c[3] = {’a’ , ’b’ ,’c’} ;
ملاحظه میکنید که آرایه b ازنظر کلاس حافظه ایستا معرفی شده است، ولی کلاس حافظه دو آرایه a و c به طور صریح بیان نشده است. بنابراین باید فرض کرد که هر دوی آنها خارجیاند. پس مقادیر عناصر سه آرایه مزبور به صورت زیر خواهد بود.
a[0] = 1 b [0] = 2.5 c (0) = a
a[1] = 2 b [1] = 3.5 c (1) = b
a[2] = 3 b [2] = 1.25 c (2) = c
a[3] = 4 b [3] = 12.5
a[4] = 5 b [4] = 3.14
a[5] = 6
a[6] = 7
اگر آرایهای به صورت مقداردهی اولیه تعریف گردد، نیاز نیست بزرگی یا اندازه آن را مشخص کنیم.
مثال به اعلان آرایه زیر توجه کنید.
int digit[ ] = {1 , 2 , 3 , 4 , 5} ;
که عناصر آن به این صورت خواهد بود.
digit[0] = 1
digit[1] = 2
digit[2] = 3
digit[3] = 4
digit[4] = 5
در مثالهای ذکر شده، آرایههایی که مقادیر اولیه گرفتهاند و کلاس حافظه آنها به طور صریح مشخص نشده از نوع خارجی فرض شدهاند (یعنی از نوع خودکار نیستند).
مثال برنامه زیر نمره امتحانی ۲۵ نفر دانشجویان کلاسی را در درس ریاضی میخواند و تعداد دانشجویان مردود و همچنین تعداد دانشجویانی را که نمره امتحانی آنان کمتر از معدل کلاس است تعیین و در خروجی چاپ میکند.
# include<stdio.h>
main ()
{
int i , f = 0 , p = 0 ;
float a[25] , average , sum = 0 ;
for (i = 0 ; i<25 ; ++ i)
{
scanf (“%f ” , &a[i]) ;
sum = sum + a[i] ;
if (a[i]<10)
f = f + 1 ;
}
average = sum / 25 ;
for (i = 0 ; i<25 ; ++i)
if (a[i] < average)
p = p + 1 ;
printf (“%f %d %d” , average , f , p) ;
}
در این برنامه f و p بهترتیب معرف تعداد دانشجویان مردود و دانشجویانی است که نمره آنان کمتر از معدل کلاسی است و در آغاز مقدار اولیه صفر داده شده است. در ضمن یادآور میشویم که این برنامه را به طور متعارف نمیتوانیم بدون استفاده از آرایه بنویسیم، زیرا قبل از اینکه نمره امتحانی همه دانشجویان خوانده شود و معدل کلاس محاسبه گردد، نمیتوان تعیین کرد که آیا نمره دانشجوی مورد نظر از معدل کلاس کمتر است یا نه. بنابراین چنانچه نمرههای دانشجویان را با متغیری ساده معرفی کنیم، هر بار که نمره دانشجوی جدیدی خوانده میشود، در همان حافظه مینشیند. لذا نمره دانشجوی قبلی پاک میگردد. پس اگر معدل کلاس را بدون استفاده از آرایه حساب کنیم، در پایان خواندن نمره دانشجویان به حافظه کامپیوتر، فقط نمره نفر آخر را در حافظه خواهیم داشت و درنتیجه در مورد دانشجویان اول تا بیست و چهارم نمیتوانیم تعیین کنیم که نمره کدام یک از آنها کمتر از معدل کلاس است. پس در این مثال استفاده از آرایه الزامی است. درنتیجه آن ۲۵ نمره به ۲۵ آدرس مختلف خوانده میشود. همچنین باید توجه کنیم که چون اندیس از صفر شروع میشود، شماره اندیسها از صفر تا بیست و چهار خواهد بود.