Hallo Oli, ich habe noch nie ein 3D Array gebraucht, also sollte mein Zeug mit Vorsicht zu geniessen sein. On Tuesday 04 March 2003 01:40, Oli Weiss wrote:
Hallo Liste,
ich bin auf der Suche nach einem Beispiel das mir armseligen (neuen)C Coder aufzeigt, wie ich mit einem 3 dimensionalen int Array umzugehen hab, von dessen Gesamtgroesse ich zunaechst nur weis, dass es drei Dimensionen hat. Nach dem Durchsuchen von gaengiger "Herold" Literatur, dem Internet und meinen Schulungsunterlagen musste ich feststellen, dass sich ab der 3. Dimension eines Arrays und der Beschaffung von dynamischen Speicher die Informationen in Grenzen halten.
Die Aussagen die ich bisher gesammelt habe reichen von "Nur wenn Du die ersten beiden Dimensionen kennst" bishin zu "stell dich nicht so bloed an". Der zugehoerige Code reicht dann auch von "VooDoo" ueber "geht scho" bis "schau mer mal". Die Vorschlaege zu Loesung schliessen sich dem an und finden sich eher in der Gegend "hier gehts" oder "malloc,calloc,realloc ist dein Freund".
Ich hab das was ich bisher weis zusammengetragen und auf ein ganz einfaches Beispiel runtergebrochen. Das Beispiel findet sich auf: www.olibaer.de/c/
Leider habe ich keine Ahnung, obwohl es offentsichtlich funktioniert, ob ich mir irgendwann nen SuperGau einfange.
Mir geht es im Moment auch nicht darum das moeglichst effizient zu gestalten ( Blockweise allokieren ) sondern eher darum, später einmal hemmungslos : arr[1][2][3]=10 und arr[57][0][12]=767 zuweisen zu koennen ohne voher zu wissen, dass es arr[1][2][3] oder arr[57][0][12] im Programmverlauf geben wird.
Du kannst das auch auf dem Heap oder dem Stack anlegen: char* p = malloc( dim1 * dim2 * dim3); *(p + i * dim2 * dim3 + j * dim3 + k) == p [i][j][k] Z.B. #include <iostream> #include <stdlib.h> using namespace std; void f( int a, int b, int c) { int* a1 = (int*) malloc( a * b * c); int a2 [a][b][c]; for (int i = 0; i < a; ++i) { for (int j = 0; j < b; ++j) { for (int k = 0; k < c; ++k) { cout << (*(a1 + i * a * b + j * b + k) = i * 100 + j * 10 + k) << " == " << (a2 [i][j][k] = i * 100 + j * 10 + k) << "\t"; } cout << endl; } cout << endl; } } Ciao