Hay dos cuestiones aquí:
- C no soporta matrices 2D, sólo matrices de matrices o arrays de punteros a las matrices, ninguno de los cuales es exactamente lo mismo como una matriz 2D
- C no permite pasar matrices a funciones como argumentos, solo punteros a matrices (generalmente, utiliza un puntero al elemento 0 de una matriz, ya que así es como termina el nombre de la matriz, por lo que su indexación se parece a un acceso de matriz)
Por lo tanto, debido al primer problema, debe decidir cómo va a representar una matriz 2D: una matriz de matrices o una serie de punteros a matrices. Si usted va la primera ruta, su código termina pareciéndose a:
void set_T(float (*T1)[100]) {
... do stuff with T1[i][j] ...
}
int main() {
float T[100][100];
set_T(T);
}
Aquí, ha declarado en T para ser un array de 100 series de 100 flotadores, y set_T toma un puntero a matrices de 100 flotadores como su argumento Pasas 'T' directamente a set_T, ya que el lenguaje trata los nombres de los arreglos como punteros a su 0 ° elemento.
Si por el contrario desea utilizar una matriz de punteros a las matrices, se termina con algo como:
void set_T(float **T1) {
... do stuff with T1[i][j] ...
}
int main() {
float *T[100];
float space[100*100];
for (int i = 0; i < 100; i++)
T[i] = space + i*100;
set_T(T);
}
La desventaja aquí es que se necesita para asignar espacio para todas las matrices de segundo nivel y Inicialice manualmente todos los punteros de primer nivel para señalarlos. La ventaja es que los tamaños de las matrices de segundo nivel no son parte del tipo de argumento pasado a set_T, por lo que puede tratar más fácilmente con matrices de tamaño variable.
Por supuesto, si realmente usa C++ y no C, no debería usar matrices C en absoluto; en su lugar, debe usar std::vector
o std::array
, que comparten el único problema C array 1D, por lo que necesita un vector de vectores o una matriz de matrices (o posiblemente un vector de matrices o una matriz de vectores)
posible duplicado de [pasar matriz 2D a función] (http://stackoverflow.com/questions/8767166/passing-2d-array-to-function) – legends2k