Вы можете сделать это с любым типом данных. Просто сделать его указатель на указатель:
typedef struct {
int myint;
char* mystring;
} data;
data** array;
Но не забывайте, что вы все еще должны таНос переменную, и она действительно становится немного сложным:
//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");
}
}
Код для освобождения структура выглядит аналогично - не забудьте позвонить бесплатно() на все, что вы malloced! (Кроме того, в надежных приложениях вы должны check the return of malloc().)
Теперь предположим, что вы хотите передать это функции. Вы все еще можете использовать двойной указатель, потому что вы, вероятно, хотите сделать манипуляции на структуру данных, а не указатель на указатели структур данных:
int whatsMyInt(data** arrayPtr, int x, int y){
return arrayPtr[y][x].myint;
}
Вызов этой функции с:
printf("My int is %d.\n", whatsMyInt(array, 2, 4));
Выход:
My int is 6.
Помощь нужна здесь: http: //stackoverflow.com/questions/16943909/manipulate-multidimensional-array-in-a-function – Dchris 2013-06-05 16:01:25
Указатель на сегментированную таблицу поиска указателя не является двумерным массивом. Просто потому, что он позволяет синтаксис `[] []`, он не волшебным образом превращается в массив.Вы не можете memcpy() и т. Д., Потому что память не выделяется в смежных ячейках памяти, что требуется для массивов. Ваша таблица поиска довольно разбросана по всей куче, делая поиск медленным, а куча фрагментирована. – Lundin 2015-06-23 10:42:37