Curso de programación gráfica

Hola Raguin, estoy echándole un ojo a un curso de programación gráfica, entonces me dice que tengo que asignar una array por ej: tabla[256][8] a una dirección que me devuelve un registro del tipo es:bp... Bueno yo he hecho este código (no estoy seguro que este bien)...
#include<bios.h>
#include<dos.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void main(void)
{
int i;
unsigned int letra[256][8];
unsigned int *puntero;
union REGS regs,oregs;
struct REGPACK reg;
puntero=letra; //me da error
regs.h.ah=0x11;
regs.h.al=0x30;
regs.h.bh=0x03;
int86(0x10,&regs,&oregs);
puntero=(unsigned int *)MK_FP(reg.r_es,reg.r_bp);
}
El problema creo que es que no se asignar un puntero a un array multidimensional, a ver si tu me puedes ayudar... Siento ser tan pesado... Muchas gracias

1 respuesta

Respuesta
1
Un puntero es básicamente una dirección de memoria.
Cuando haces esto:
int x = 5;
int * p;
p = &x;
el puntero p contiene la direccion en memoria de la variable x (&x==direccion de x).
El problema con tu matriz (o array de arrays) es que el compilador lo trata como varias direcciones distintas (una por cada array, en este caso 8), aunque en realidad todos los datos estén consecutivos en memoria.
Básicamente entonces lo que intentas es asignar 8 direcciones a un dato que solo puede albergar una dirección.
De forma que para acceder mediante punteros a tu matriz, deberás acceder a los arrays que la forman de forma independiente. Esto es:
int matriz[5][6];
int * p;
p = matriz[0]; // el puntero apunta al primer array
Si kieres acceder a datos independientes dentro de un array:
int matriz[5][6];
int * p;
p = matriz[2][4]; //error, matriz[2][4] es el dato de la matriz en la fila 2 columna 4
p = &matriz[2][4]; //correcto, ahora p contiene la direccion del dato, no su valor.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas