pasando arrays dynamics en 2D a la función

Estoy escribiendo un progtwig de multiplicación de matrices de ansn en C donde a [] [] y b [] [] son ​​las entradas y x [] [] es la salida. a, b y x son malloc’d pero no estoy seguro de cómo pasar los punteros a la función de multiplicación correctamente. A continuación se muestra un resumen de lo que estoy tratando de hacer.

void multiplication(float a, float b, float x, int n); void main() { float **a, **b, **x; int n; // size of arrays (nxn) multiplication(a, b, x, n); } void multiplication(float a, float b, float x, int n) { // function } 

Desea la void multiplication(float *a, float *b, float *x, int n); . Tenga en cuenta que, en general, debe usar size_t para los índices y tamaños de matriz, y double como su tipo de punto flotante preferido a menos que tenga una razón específica para usar float .

Cada uno de los puntos a, b y x apuntan a valores flotantes contiguos, querrá desreferenciarlos usando a[n * x + y] .

C99 introduce todo tipo de interesantes posibilidades de optimización además de todo esto, en lo que prácticamente no se puede confiar en ningún comstackdor que conozca:

  • Arreglos de longitud variable en GCC
  • Matrices en XL C / C ++ V7.0 (para AIX)

Con eso, algo como esto debería ser posible:

 void multiplication(size_t len; // <- semicolon not a mistake double a[len][restrict const len], double b[len][restrict const len], double c[len][restrict const len]); 

Esta construcción pedante indicaría al comstackdor que la longitud de los arreglos es la misma, que es 2D y que los tamaños se indican a partir del código de llamada en tiempo de ejecución. Además, todos los arreglos son cacheables, ya que no son alias unos a otros.

Uno solo puede soñar que C sigue siendo avanzado, C99 aún no está totalmente soportado y muchas otras mejoras no se han convertido en algo común.

Tienes que pasar la dirección del primer elemento de ambas matrices en el método de multiplicación

en realidad, lo que sucede es que los elementos de una matriz están ordenados como una cola significa un elemento tras otro. por lo tanto, si conoce la dirección del primer elemento, simplemente aumenta el número de índice y obtiene fácilmente todos los miembros de esa matriz.

mira esto

podría ser de ayuda

Bueno, debes entender los indicadores para hacer este tipo de cosas en C. Aquí hay un código simple:

 int n = 10; float * multiply ( float *a, float *b ) { float *ans; int i, j, k; ans = malloc(sizeof(float)*n*n); for (i=0; i 

Si tiene problemas para entender el código, trate de mejorar sus habilidades de puntero. Y siempre puedes preguntarnos.

Esta es una forma fácil y fácil de pasar los arreglos asignados dinámicamente a una función.

 #include  #include  void Function(int ***Array); int main() { int i, j, k, n=10; //Declare array, and allocate memory using malloc. ( Dimensions will be 10 x 10 x 10) int ***Array=(int***)malloc(n*sizeof(int**)); for (i=0; i 

Sé que esto no es específico de su multiplicación de matrices, pero debería demostrar cómo pasar la matriz a la función. Es muy probable que su función necesite conocer las dimensiones de la matriz, así que páselesla también ... void Function(int ***Array, int n) y llame a la función como Function(Array, n);