Non entro nel merito di dev-c++ , non ne ho le competenze
Io uso geany come IDE sotto Linux Ubuntu, compilatore gcc
La possibilità di inizializzare variabili ovunque serva, in particolare dentro ad un for mi sembra che venga proprio dall'edizione 1999 del linguaggio,
Se antragorn ha interesse può spostare l'inizializzazione delle variabili all'inizio della funzione, come in 'C' storico
Però capire come impostare l'uso del C99 (almeno) se non C18 secondo me serve (anche a me peraltro)
Invece per la domanda esplicita:
Come fai tu è più semplice ma meno flessibile
Mi spiego:
Se tu passi per una funzione per stampare la matrice tale funzione deve per forza avere un prototipo del tipo
void stampa(int matrice[][3])....)
Se provi a non specificare il secondo indice non compila
Lascio a te lo studio del perché
Se non puoi fare così usi alcune particolarità del C
1
Gli tutti gli elementi di un array sono scritti impaccati uno dopo l'altro (garantito da K&R)
2
Alle funzioni viene passato non l'array ma il puntatore all'array
3
Aggiungere uno ad un puntatore non lo fa puntare al byte successivo ma all'elemento successivo, qualunque sia la dimensione dell'elemento
Quindi io in stampa ricevo un puntatore
Conoscendo riga, colonna e dimensioni dello array calcolo il puntatore
Uso il valore calcolato per accedere direttamente all'elemento
E funziona per qualunque array bidimensionale (anche tri o poli)
Sia esso statico, VLA o allocato dinamicamente
Puoi usare questa caratteristica anche per leggere bidimensionale un array mono o poli dimensionale
Purché il numero di elementi non cambi, puoi leggere un array di 4 come un 2x2 oppure un 16 come 4x4 2x8 2x2x4 2x2x2x2,
Sono stato chiaro?