Cómo enviar una matriz unidimensional a una función y tener esa misma matriz (posición en la memoria) convertida en una matriz bidimensional en C ++

Una matriz es solo un puntero a la memoria, y también lo es una matriz 2D. Una matriz 2D no es una matriz de punteros. Es solo un puntero a los datos. Las dimensiones no se almacenan con la variable en absoluto, son simplemente utilizadas por el compilador para las matemáticas necesarias para acceder a los elementos. Simplemente puede apuntar a los datos con un tipo diferente. Al igual que:

#include

typedef int Array1D [5];
typedef int Array2D [5] [6];

int _tmain (int argc, _TCHAR * argv [])
{
int testArray1D [] =
{
1, 2, 3, 4, 5,
6, 7, 8, 9, 10,
11, 12, 13, 14, 15,
16, 17, 18, 19, 20,
21, 22, 23, 24, 25,
26, 27, 28, 29, 20,
};
Array2D * array2D = (Array2D *) & testArray1D;
para (int i = 0; i <6; ++ i)
{
para (int j = 0; j <5; ++ j)
{
printf (“% d”, (* array2D) [j] [i]);
}
printf (“\ n”);
}
devuelve 0;
}


En C ++, una matriz es solo un puntero a la memoria, y una matriz bidimensional es solo una matriz de matrices. Por lo tanto, solo necesita hacer una matriz (tamaño numRows) para almacenar la dimensión exterior.

Establezca cada elemento de la matriz externa en la ubicación de memoria de oneDimensionalArray [currentRow * numColumns]. Luego puede acceder a través de dosDimensionalArray [fila] [columna].

Deberá administrar el almacenamiento de twoDimensionalArray por separado. Sin embargo, solo debería ser numRows largo.

Puede acceder a oneDimensionalArray de manera bidimensional haciendo los cálculos en cada acceso y luego no necesita la matriz adicional, pero eso no es exactamente lo que solicitó.

More Interesting

Cómo comparar dos algoritmos de recomendación en términos de problema de cola larga

¿Cuál es la lógica y la intuición detrás del algoritmo de optimización de momento y por qué se considera mejor que el descenso de gradiente?

¿Es necesario aprender matemáticas discretas antes de comenzar a aprender la estructura de datos y el algoritmo? ¿Y cuál será el mejor libro para hacer lo mismo?

¿Cómo hacemos que una selección sea estable?

Quiero aprender estructuras de datos OOP y algoritmos usando PHP. ¿Cuáles son los buenos recursos que usan PHP para enseñar algoritmos?

¿Se puede usar el algoritmo DBSCAN para determinar los límites del área geográfica?

Rendimiento del software: ¿los algoritmos de cálculo se ejecutarán más rápido cuando se implementen en Node.js en lugar de C?

¿Es la incapacidad de implementar estructuras de datos básicas como una lista doblemente enlazada, un árbol con punteros primarios usando un código seguro la mayor debilidad de Rust?

C: ¿Existe un enfoque general para convertir una función recursiva en iterativa y viceversa?

¿Está roto el algoritmo de clasificación de Java y Python?

Cómo obtener el número de coprimos de n bajo n

Cómo entender rápidamente la complejidad del tiempo en su conjunto y sus 3 anotaciones

Cómo verificar en C ++ si varias cadenas tienen una coincidencia con una sola cadena de una sola vez

¿Cuál es el propósito del factor de carga en las tablas hash?

¿Cómo se implementa std :: make_heap de STL?