Многомерный массив — массив, имеющий более одного измерения. Число измерений массива в языке Си не ограничено.
В функцию можно передавать лишь адрес массива, а не копию всего массива. Тем не менее, в функции для доступа к элементам массива можно использовать индексы.
Пример 1
/* Программа для чтения текстового файла и выдачи на печать лишь тех слов,
                   которые начинаются с прописной буквы */

#include <stdio.h>
int main()
{
  void print_caps(int, const char [][20]);
  int amount_read = 0;
  char input[1000][20];         /* Это массив из 1000 массивов из 20 символов */

  while (scanf("%s", input[amount_read]) == 1)
     amount_read++;               /* input[amount_read] - один из массивов из 20 символов */
  print_caps(amount_read, input);
}

/* print_caps печатает лишь те слова, которые начинаются с прописной буквы */
void print_caps(int n_words, const char words[][20])
/* words - Это массив из произвольного числа массивов из 20 символов */
{
   int i=0;
   while (i < n_words)
      {
      if (words[i][0] <= 'Z' && words[i][0] >= 'A')
                                   /* words[i][0] - 0-ой символ i-го массива из 20 символов */
         printf("%s\n", words[i]); /* words[i] - Один из массивов из 20 символов*/
      i++;
      }
 }
Значением операции доступа к элементу массива words[i][j] будет адрес, вычисленный по следующим формулам: