Volevo solo aggiungere una nota, in C99 (non c++) è consentito l'uso
di array a dimensione variabile, per cui questo codice è compilato correttamente.

codice:
#include <stdio.h>

int main()
{
  int i, j, n, m;
  
  scanf("%d", &n);
  scanf("%d", &m);
  
  int a[n][m];
  
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++)
    {
      printf("[%d][%d]: ", i, j);
      scanf("%d", &a[i][j]);
    }
  
  for (i = 0; i < n; i++)
  {
    for (j = 0; j < m; j++)
      printf("%d ", a[i][j]);
      
    putchar('\n');
  }
  
  return 0;
}
Questa funzionalità verrà proposta in futuro per il nuovo standard ansi c++, ma ancora non si sa se verrà effettivamente integrata.

C99 è lo standard ANSI C introdotto nel 1999, ed è il primo standard C che permette di utilizzare anche i commenti del c++ (//)

inoltre aggiunge anche altre cose
http://www.informit.com/isapi/guide~...de/content.asp
http://www.mit.edu/iap/2004/c/week2_day4/notes
http://en.wikipedia.org/wiki/C_programming_language#C99