Puede hacerlo con cualquier tipo de datos. Basta con que sea un puntero puntero a:
typedef struct {
int myint;
char* mystring;
} data;
data** array;
Pero no se olvide que todavía tiene que malloc la variable, y se pone un poco compleja:
//initialize
int x,y,w,h;
w = 10; //width of array
h = 20; //height of array
//malloc the 'y' dimension
array = malloc(sizeof(data*) * h);
//iterate over 'y' dimension
for(y=0;y<h;y++){
//malloc the 'x' dimension
array[y] = malloc(sizeof(data) * w);
//iterate over the 'x' dimension
for(x=0;x<w;x++){
//malloc the string in the data structure
array[y][x].mystring = malloc(50); //50 chars
//initialize
array[y][x].myint = 6;
strcpy(array[y][x].mystring, "w00t");
}
}
El código para anular la planificación de la la estructura se ve similar, no olvides llamar gratis() a todo lo que has malloced. (Además, en aplicaciones robustas, debe check the return of malloc()).
Ahora supongamos que desea pasar esto a una función. Puede seguir utilizando el puntero doble, ya que es probable que desee hacer manipulaciones en la estructura de datos, no el puntero a los punteros de las estructuras de datos:
int whatsMyInt(data** arrayPtr, int x, int y){
return arrayPtr[y][x].myint;
}
llamar a esta función con:
printf("My int is %d.\n", whatsMyInt(array, 2, 4));
de salida:
My int is 6.
se necesita ayuda aquí: http: //stackoverflow.com/questions/16943909/manipulate-multidimensional-array-in-a-function – Dchris
Un puntero a la tabla de búsqueda segmentada por puntero no es una matriz 2D. Solo porque permite la sintaxis '[] []', mágicamente no se convierte en una matriz.No puede memcpy(), etc. porque la memoria no está asignada en celdas de memoria adyacentes, lo cual es necesario para las matrices. Su tabla de búsqueda está bastante dispersa por todo el montón, haciendo que las búsquedas sean lentas y el montón fragmentado. – Lundin