آرایه‌های چندبعدی نیز مشابه آرایه‌های یک‌بعدی تعریف می‌گردند، با این تفاوت که طول یا بزرگی هر بعد آرایه در داخل یک زوج کروشه مشخص می‌گردد. از این رو آرایه دوبعدی دو جفت کروشه و آرایه سه بعدی سه جفت کروشه دارد.
بنابراین شکل کلی تعریف آرایه n بعدی به صورت زیر خواهد بود.
storage-class data-type array-name[size1][size2]… [sizen] ;
که در آن sizen ,…, size2 , size 1 به‌ترتیب بزرگی بعد یکم تا n اُم آرایه است.
برای مثال یک آرایه دوبعدی ۳ Î ۴ از نوع int را می‌توان به صورت زیر معرفی کرد.
int a[3][4] ;
در شکل ۷ـ۱ آرایه دوبعدی m Î n (شامل m سطر و n ستون) را می‌بینید.
به طریق مشابه می‌توان آرایه‌های ۳ بعدی یا بیشتر را تعریف کرد، مانند مثالهای زیر.
int a[3][4][5] ;
float b[2][3][8][5] ;
char page[2][5][10] ;

lad
همچنین می‌توان هنگام تعریف آرایه‌های دوبعدی یا بالاتر به آنها مقدار اولیه نسبت داد که البته باید آرایه مورد نظر از کلاس حافظه ایستا یا خارجی باشد.
مثال ۷ـ۶ دستور زیر را در نظر بگیرید.
int array[3][4] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12} ;
در اینجا فرض بر این است که آرایه از کلاس حافظه خارجی است. آرایه مزبور را می‌توان جدولی تصور کرد که دارای ۳ سطر و ۴ ستون (۴ عنصر در هر سطر) است. مقادیر اولیه نیز به ترتیب به عناصر سطرها اختصاص می‌یابد (یعنی اندیس یا زیرنویس سمت راست سریع‌تر حرکت می‌کند). بنابراین مقادیر عناصر آرایه مزبور به صورت زیر خواهد بود.
array[0][0] = 1    array[0][1] = 2    array[0][2] = 3    array[0][3] = 4
array[1][0] = 5    array[1][1] = 6    array[1][2] = 7    array[1][3] = 8
array[2][0] = 9    array[2][1] = 10    array[2][2] = 11    array[2][3] = 12
توجه داشته باشید که عملکرد یا محدوده تغییرات اندیس اول (اندیس سمت چپ) از صفر تا ۲ و اندیس دوم (اندیس سمت راست) از صفر تا ۳ است.

نحوه اختصاص مقادیر اولیه به عناصر آرایه را می‌توان با دسته‌بندی کردن آنها در داخل زوج آکولاد تغییر داد. برای مثال در آرایه دوبعدی مقادیر داخل هر زوج آکولاد درونی به ترتیب به عناصر یکی از سطرها نسبت داده خواهد شد. اگر تعداد مقادیر موجود در درون هر زوج آکولاد درونی کمتر از تعداد عناصر سطر متناظر آن باشد، به بقیه عناصر سطر مزبور مقدار صفر نسبت داده خواهد شد. برای مثال، نتیجه عملکرد دستور زیر
int array[3][4] = {
{۱ , ۲ , ۳ , ۴} ,
{۵ , ۶ , ۷ , ۸} ,
{۹ , ۱۰ , ۱۱ , ۱۲}
} ;
با مثال ۷ـ۶ یکسان خواهد بود.
حال دستور زیر را درنظر بگیرید.
int array[3][4] = {
{۱ , ۲ , ۳} ,
{۴, ۵ , ۶} ,
{۷, ۸ , ۹}
} ;
به عناصر ستون چهارم مقادیری نسبت داده نشده است. لذا مقادیر آنها برابر صفر خواهد شد؛ یعنی مقادیر عناصر آرایه مورد نظر به صورت زیر خواهد بود.
array[0][0] = 1    array[0][1] = 2    array[0][2] = 3    array[0][3] = 0
array[1][0] = 4    array[1][1] = 5    array[1][2] = 6    array[1][3] = 0
array[2][0] = 7    array[2][1] = 8    array[2][2] = 9    array[2][3] = 0
درحالی که اگر آرایه مزبور را به صورت int array[3][4] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9) ; تعریف کنیم، مقادیر نسبت داده شده به عناصر آرایه مورد نظر به صورت خواهد بود.
array[0][0] = 1    array[0][1] = 2    array[0][2] = 3    array[0][3] = 4
array[1][0] = 5    array[1][1] = 6    array[1][2] = 7    array[1][3] = 8
array[2][0] = 9    array[2][1] = 0    array[2][2] = 0    array[2][3] = 0