typecasting type traduccion punteros flotante entero convertir cast c memory casting

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;