Si ok, ho un array bidimensionale, quindi una matrice. Mi spiego meglio, allora la matrice che sto considerando rappresenta un'immagine binaria, devo elaborare questa immagine attraverso un algoritmo, per poi andare a programmare un processore. Visto che il processore ha poca memoria definendo la matrice con int, il programma non entra all'interno della memoria locale del processore, mentre entrerebbe se dichiaro la matrice come unsigned char. Il problema è appunto che dichiarando la matrice come unsigned char, poi si pone il problema di come utilizzare il puntatore, il codice completo del programma è il seguente:
#include <stdio.h>
#include <stdlib.h>
#include "matrix.h"
#include "imelaborate.h"
int main(int argc, char *argv[])
{
int *a=NULL;
int *v=NULL;
int i,j,s;
//Ricezione immagine in ingresso
int m=(sizeof(*A)/4);
int n=(sizeof(A)/4)/m;
a=&(A[0][0]);
//Elaborazione dell'immagine
v=imelaborate(a,n,m,s);
//Ricostruzione immagine dal puntatore
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
A[i][j]=*(v+i*m+j);
}
}
Praticamente la funzione imelaborate effettua un'elaborazione sulla matrice, restituendo il puntatore al primo elemento A[0][0].
Quindi ricapitolando ho una matrice A di 1 e 0 (rappresenta la mia immagine binaria), ho un puntatore a al primo elemento della matrice A[0][0], utilizzo la funzione imelaborate che prende come argomento il puntatore a, le dimensioni di A, più un altro elemento s che mi serve per effettuare l'elaborazione, a questo punto imelaborate mi restituisce il puntatore v che punta a A[0][0], primo elemento della matrice elaborata e infine attraverso l'ultimo ciclo for dal puntatore v mi ricostruisco tutta la matrice dopo l'elaborazione. Quindi alla fine ottengo la mia matrice A elaborata. A questo punto io vorrei fare la stessa elaborazione, ma utilizzando come dimensione della matrice unsigned char così che da poter programmare il processore con il codice. Quindi a tal fine come posso cambiare il codice?