traduccion - type casting c++
Emitir puntero vacĂo a matriz de enteros (2)
Comenzando con su declaración ptr
unsigned char *ptr = 0x00000000; // fictional point in memory goes up to 0x0000EA60
Puede convertir ptr a un puntero al tipo que esté tratando con el bloque, en este caso una matriz de matriz de int sin signo. Declararemos un nuevo puntero:
unsigned int (*array_2d)[100][150] = (unsigned int (*)[100][150])ptr;
Luego, acceda a los elementos mediante la desreferenciación y luego la indexación de la misma manera que lo haría para una matriz 2d normal.
(*array_2d)[50][73] = 27;
Algunos typedef
también ayudarían a limpiar las cosas.
typedef unsigned int my_2d_array_t[100][150];
typedef my_2d_array_t *my_2d_array_ptr_t;
my_2d_array_ptr_t array_2d = (my_2d_array_ptr_t)ptr;
(*array_2d)[26][3] = 357;
...
Y sizeof
debería funcionar correctamente.
sizeof(array_2d); //4, given 32-bit pointer
sizeof(*array_2d); //60000, given 32-bit ints
sizeof((*array_2d)[0]); //600, size of array of 150 ints
sizeof((*array_2d)[0][1]); //4, size of 1 int
Tengo un problema donde tengo un puntero a un área en la memoria. Me gustaría usar este puntero para crear una matriz de enteros.
Esencialmente esto es lo que tengo, un puntero a una dirección de memoria de tamaño 100 * 300 * 2 = 60000 bytes
unsigned char *ptr = 0x00000000; // fictional point in memory goes up to 0x0000EA60
Lo que me gustaría lograr es examinar esta memoria como una matriz entera de tamaño 100 * 150 = 15000 ints = 60000 bytes, como esto:
unsigned int array[ 100 ][ 150 ];
Supongo que se trata de un casting, aunque no estoy seguro de cómo formularlo. Cualquier ayuda sería apreciada.
Puede lanzar el puntero a unsigned int (*)[150]
. Luego se puede usar como si fuera una matriz 2D ("como si", ya que el comportamiento de sizeof
es diferente).
unsigned int (*array)[150] = (unsigned int (*)[150]) ptr;