ho tale matrice nel mio programma:C++ colata statica a doppia matrice bidimensionale di raddoppiare **
double m[3][4] =
{
{2, 4, 5, 7},
{4, 5, 1, 12},
{9, 12, 13, -4}
};
E vorrei gettarlo ai double**
tipo.
Ho già provato semplice double** a = (double**)m;
, ma non funziona (quando provo a leggere qualsiasi valore, ottengo "Accesso alla violazione di lettura posizione 0x00000000.", Il che significa che sto cercando di leggere dall'indirizzo NULL
.
ho trovato quasi soluzione di lavoro:
double *b = &m[0][0];
double **c = &b;
funziona quando ho letto campo c[0][any]
ma lo stesso indirizzo NULL problema di lettura si verifica, quando si tenta di leggere il valore dal campo c[1][0]
Qual è il modo corretto di trasmettere la mia matrice double m[3][4]
per digitare double**
?
modifica: Tu dici che è impossibile. Quindi cambierò un problema un po '. Come posso passare il doppio array bidimensionale come parametro per una funzione? La mia funzione ha un prototipo:
void calculate(double **matrix, int n); //where matrix size is always n by n+1
E funziona perfettamente con array allocati dinamicamente. Dubito che l'unico modo per farlo funzionare è allocare nuovo array dinamico e copiare un array statico originale un elemento di un altro ...
casting non ha intenzione di fare questo lavoro. Un 'double **' richiede un puntatore a un puntatore a un double, e non è quello che hai. È possibile * probabilmente * cavarsela con un 'double *' e passare in modo esplicito le dimensioni dell'array. –
Un array di matrici e un puntatore a un puntatore non è la stessa cosa. Il layout in memoria non corrisponde, quindi non è possibile utilizzarne uno per l'altro. –
Usa la tecnica proposta da Vaughn Cato. Se prende un 'double **', devi dargli un 'double **' e non un array bidimensionale. –