Avatar billede anadan Nybegynder
05. november 2002 - 09:59 Der er 11 kommentarer og
1 løsning

pointers til multidimensionelle arrays

Hurtigt spørgsmål:

Jeg er ved at lave et progrem der bruger 2 og 3 dimensionelle int arrays. Hvordan laver jeg en pointer til disse arrays, og kopierer disse pointere rundt?
Også hvordan returnerer jeg pointere til disse arrays fra en metode?
Avatar billede jpk Nybegynder
05. november 2002 - 10:12 #1
Noget lign:

int** p2DArray = new int[10][10];
int*** p3DArray = new int[10][10][10];

int** Func()
{
  int** p2DArray = new int[10][10];
  return p2DArray;
}
Avatar billede jpk Nybegynder
05. november 2002 - 10:17 #2
Vrøvl, det virker naturligvis kun således:

int Array2D[10][10]; // statisk
Avatar billede jpk Nybegynder
05. november 2002 - 10:19 #3
Ellers skal du nok gøre sådan:

int** Func()
{
  int** p2DArray = new int*[10];
  for(int i=0; i<10; ++i)
      p2DArray[i] = new int[10];
  return p2DArray;
}
Avatar billede jpk Nybegynder
05. november 2002 - 10:21 #4
Men du burde jo nok lave en klasse der håndterer alt dette, så du ikke skal bekymre dig om memory-allokering i din forretningskode...
Avatar billede anadan Nybegynder
05. november 2002 - 10:39 #5
hvis jeg nu har lavet et array på denne måde :
int data [2][2] = {{1,2},{3,4}};
hvordan returnerer jeg så pointeren til det?
Avatar billede jpk Nybegynder
05. november 2002 - 10:41 #6
return &data;
Avatar billede anadan Nybegynder
05. november 2002 - 10:51 #7
Tak for de hurtige svar
Avatar billede jpk Nybegynder
05. november 2002 - 10:53 #8
Velbekomme og tak for point...
Avatar billede anadan Nybegynder
05. november 2002 - 11:59 #9
hmm, jeg skal lige bruge et råd igen...
Her er en del af min kode:
static int*** newBlock(int r){
  switch(r){
      case 0:{
        int*** temp = new int*[4][4]
            { { {1,1,0,0},{1,1,0,0},{0,0,0,0},{0,0,0,0} }
            , { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} }
            , { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} }
            , { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} } };
        return &temp;
det virker ikke, hvad skal jeg gøre
Avatar billede jpk Nybegynder
05. november 2002 - 13:30 #10
Hvad er det du vil..?

Din kode giver ikke mening!
1) Du returnerer en statisk int*** (hvorfor)
2) Du forsøger at oprette et 2-dimensionalt array (som du kan pege på via en int** (ikke int***)

Altså, hvad er det du vil frem til?
Avatar billede anadan Nybegynder
06. november 2002 - 08:36 #11
Jeg er ved at lave tetris, og mit array består af de 4 måder en blok kan vende på (i eksemplet er det en square, der kun kan vende på en måde, derfor er de 3 andre tomme). Der skal være en statisk metode, der kan returnere en pointer til en ny tilfældig bloks måder at vende på. Senere vil jeg gerne udtrække eks temp[0] (den første måde at vende på), og tegne den. Det virker fint når jeg kopierer arrays, men det går for langsomt, derfor vil jeg bruge pointers... Håber det giver lidt mere mening
Avatar billede jpk Nybegynder
06. november 2002 - 09:21 #12
Hmm, det ser ikke just kønt ud, hvad med noget lign.:

class Blocks
{
public:
    const static int nSquareRotations[4][4][4];
    const static int nRectangleRotations[4][4][4];
    // Osv...
};

const int Blocks::nSquareRotations[4][4][4] =
{
    { {1,1,0,0},{1,1,0,0},{0,0,0,0},{0,0,0,0} }
    , { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} }
    , { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} }
    , { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} }
};

const int Blocks::nRectangleRotations[4][4][4] =
{
    { {1,1,0,0},{1,1,0,0},{0,0,0,0},{0,0,0,0} }
    , { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} }
    , { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} }
    , { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} }
};

int*** Func(int r)
{
    switch(r)
    {
        case 0:
            return (int***)Blocks::nSquareRotations;

        case 1:
            return (int***)Blocks::nRectangleRotations;

        default:
            return 0;
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester