вобще конкретно для си, массив, это всегда строка со списком адресов элементов. Даже если ты работаеш с многомерным массивом - ты работаеш со строкой просто позиция элемента a[i,j] массива a[N,M] (грубо говоря) вычисляется как a[i*N+j]... делайте выводы...
немного не так... при работе с многомерным массивом добавляется массив указателей на строки, элементы которых уже являются значимыми...
поэтому с точки зрения синтаксиса:
int a[n][k];
...
a[i*n + j];
правильно, но с точки зрения адресации в памяти, нет.