Witam
Czy może ktoś wie jak stworzyć tablice dwuwymiarową przy użyciu pamięci współdzielonej ? Jedyne co mi przychodzi na myśl to stworzyć tablice jednowymiarową i napisać funkcje która mi zamieni współrzedne 2D na indeks w tablicy. Czy może ktoś wie czy da się to zrobić bardziej elegancko?
Pozdrawiam.
0
0
e, imho to jest dość eleganckie, statyczne tablice 2D właśnie tak działają, tylko przeliczenia są w tle, przez kompilator robione. Dynamiczne 2D to tablica wskaźników na mniejsze bloki - na chłopski więc rozum możesz spreparować 'udawaną' tablicę 2D, która będzie 'mapowała' współdzielony blok:
#include <stdio.h>
#define TABX 12
#define TABY 6
int main() {
/* załóżmy, że to twój liniowy współdzielony blok ;) */
int* block = malloc( TABX*TABY * sizeof(int) );
/* robisz tablicę wskaźników*/
int** table = (int**)malloc(TABX*sizeof(int*));
int i,j;
/* początek tablicy zawiera wskaźnik na początek bloku
kolejne elementy tablicy zawierają wskaźnik do kolejnego wiersza
czyli to tutaj robimy przeliczenie 2d na liniowe
*/
for(i=0; i<TABX;i++) table[i] = block+ i*TABY;
/* a tutaj już używasz normalnie, jak w każdej dynamicznej tablicy 2d */
for(i=0;i<TABX;i++) for(j=0;j<TABY;j++) table[i][j] = (i+1) * (j+1);
/* dla pewności oglądnijmy liniową zawartość bloku */
for(i=0;i<TABX*TABY; i++) {
printf("%4i", block[i]);
if(i%TABY==TABY-1) printf("\n");
}
/* wynik powinien wskazywać, że nasze [x][y] wypełniło blok linowy ładnie */
return 0;
}