Bunu herhangi bir veri türü ile yapabilirsiniz. Basitçe bunu bir işaretçi-to-işaretçi olun:
typedef struct {
int myint;
char* mystring;
} data;
data** array;
Ama hala değişken Malloc zorunda unutmayın ve biraz karmaşık olsun:
//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");
}
}
ayırması kodu yapı benzer görünüyor - malloced her şeyi ücretsiz() aramak için unutmayın! (Ayrıca, sağlam uygulamalarda, check the return of malloc().
Şimdi bunu bir işleve aktarmak istediğinizi varsayalım.
int whatsMyInt(data** arrayPtr, int x, int y){
return arrayPtr[y][x].myint;
}
Çağrı ile bu fonksiyon:
printf("My int is %d.\n", whatsMyInt(array, 2, 4));
Çıktı muhtemelen veri yapılarının işaretçilere veri yapısı değil, üzerindeki imleci manipülasyonlar yapmak istiyorum çünkü hala çift işaretçi kullanabilirsiniz:
My int is 6.
help here here: http: //stackoverflow.com/questions/16943909/manipulate-multidimensional-array-in-a-function – Dchris
İşaretçi bölümlü arama tablosuna bir işaretçi bir 2D dizi değildir. Sadece [] [] sözdizimine izin verdiği için, bir diziye dönüşmez.Hafıza, diziler için gerekli olan bitişik bellek hücrelerine tahsis edilmediğinden, memcpy() vb. Arama tablonuz yığının her yerine dağınık, aramaları yavaşlatıyor ve yığın parçalanmış. – Lundin