Sie können dies mit jedem Datentyp tun. machen es einfach einen Zeiger auf Zeiger:
typedef struct {
int myint;
char* mystring;
} data;
data** array;
Aber nicht vergessen, dass Sie immer noch die Variable malloc haben, und es hat ein wenig komplex:
//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");
}
}
Der Code ausplanen die Struktur sieht ähnlich aus - vergessen Sie nicht, kostenlos() auf alles, was Sie malloced! (Auch in robusten Anwendungen sollten Sie check the return of malloc().)
Jetzt sagen wir, Sie möchten dies an eine Funktion übergeben. Sie können immer noch den doppelten Zeiger verwenden, weil Sie wahrscheinlich Manipulationen an der Datenstruktur tun wollen, nicht den Zeiger auf Zeiger von Datenstrukturen:
int whatsMyInt(data** arrayPtr, int x, int y){
return arrayPtr[y][x].myint;
}
Rufen Sie diese Funktion mit:
printf("My int is %d.\n", whatsMyInt(array, 2, 4));
Ausgang:
My int is 6.
Hilfe benötigt hier: http: //stackoverflow.com/questions/16943909/manipulate-multidimensional-array-in-a-function – Dchris
Ein Zeiger auf Zeiger segmentierte Nachschlagetabelle ist kein 2D-Array. Nur weil es die '[] []' - Syntax zulässt, verwandelt es sich nicht magisch in ein Array.Sie können es nicht memcpy() usw., da der Speicher nicht in benachbarten Speicherzellen zugeordnet ist, was für Arrays erforderlich ist. Ihre Nachschlagetabelle ist über den gesamten Heap verstreut, wodurch Suchvorgänge langsam und der Heap fragmentiert werden. – Lundin