il seguente codice compila con un compilatore c ma non con uno c++
codice:
#include <stdio.h>
int m,n;
int f(int a[m][n]){
printf("values = %d - %d\n",m,n);
}
int main(){
int i,j;
m = 5; n = 4;
int b[m][n];
for (i = 0; i< m;i++)
for(j=0;j<n;j++)
b[i][j] = i*j; /* assegna questo valore tanto per inizializzare*/
f(b);
}
usando Dev-C++ se lo compilo in un progetto C va bene, se il progetto è C++ mi dice:
" variable-size type declared outside of any function "
"cannot convert `int (*)[((unsigned int)((int)n))]' to `int (*)[2]' for argument `1' to `int f(int (*)[2])' "
inoltre il programma nonostante compili, non è corretto:
la dichiarazione int b[m][n] è una dichiarazione a tempo di compilazione con valori
che vengono definiti solo al momento dell'esecuzione. infatti con m = n = 1000
va in seg fault.
ma veniamo alla domanda:
Il problema è che ho una funziona già scritta in C che prende come argomento una matrice
e non so come fare perche la dimensione della matrice non è definibile a tempo di
compilazione. Mi sembra che le matrici siano intrattabili a meno di non definire le dimensioni a tempo di compil. (es: int a[10][10]) oppure a meno di ricorrere ad un unico array
ed accdervi con a[(numero_riga * numero_totale_di_colone)+numero di colonna],
cosa che la funzione di cui sopra non fa.
qualcuno ha qualche consiglio utile?