SDCdMedlem sedan jan. 2001712 inlägg
Om man vill skicka en integer array till en funktion antar jag att nedanstående kodsnutt fungerar:
#include <iostream.h>
void tilldela(int *pplan, int grund);
main()
{
const int GAMESIZE=4;
const int ARRSIZE=GAMESIZE+2;
int plan[ARRSIZE];
tilldela(plan, ARRSIZE);
for(int i=0;i<ARRSIZE;i++)
{
cout << plan[i];
}
cin.get();
}
void tilldela(int *pplan, int grund)
{
const int START=0;
for(int i=0;i<grund;i++)
{
// for(int j=0;j<grund;j++)
// {
pplan[i] = i;
// }
}
}
Kan jag på något liknande sätt skicka en två dimensionell array, utan att i funktionshuvudet behöva ange storleken?
Det jag skulle vilja göra är att, om jag vill ändra på storleken på arrayen, bara ändra på konstanten GAMESIZE i main().
PeWMedlem sedan juni 20006 839 inlägg
Jepp, man anger inte storlek i funktionshuvuden, det du får i funktionen är en pekare till den arrayen du skickar med... :
void foo(int a[][]){
...
for(int i=0;i<MAX;i++)
for(int j=0;j<MAX;j++)
a[i][j]=777;
...
}
SDCdMedlem sedan jan. 2001712 inlägg
Hmm, måste tänka fel, för att kompilatorn skall godta koden måste jag ange minst det sista värdet i min två dimmensionella array.
UlfTMedlem sedan maj 20016 050 inlägg
SDCd skrev:
Hmm, måste tänka fel, för att kompilatorn skall godta koden måste jag ange minst det sista värdet i min två dimmensionella array.
Du tänker inte fel. Det är så som du skriver. Egentligen är en matris (2-dim-array) en lång array av det minne som du allokerade för matrisen. Har du deklarerat matrisen m[2][2], kan du komma åt en och samma element genom både m[1][0] och m[2]. Men för att matris-åtkomsten ska fungera, måste programmet på något vis veta matrisens dimensioner så det vet var i minnet som nästa rad börjar på. Det är vad du talar om för din funktion genom att ange antal kolumner.
SDCdMedlem sedan jan. 2001712 inlägg
Så det finns alltså inget sätt att skicka en 2-dimensionell array, på samma sätt som i mitt exempel ovan?
Alltså deklarera den med en konstant storlek i main()? Anledningen att jag frågar är att jag skulle vilja ha en array som jag kan ändra storlek på genom att ändra en konstant i main().
UlfTMedlem sedan maj 20016 050 inlägg
SDCd skrev:
Så det finns alltså inget sätt att skicka en 2-dimensionell array, på samma sätt som i mitt exempel ovan?
Alltså deklarera den med en konstant storlek i main()? Anledningen att jag frågar är att jag skulle vilja ha en array som jag kan ändra storlek på genom att ändra en konstant i main().
Du skulle kunna ha egna storlekar på din matris och du skickar med info om hur stor matrisen är. Du får dock komma åt elementen lite annorlunda än vad du är van vid.
main()
{
int matrix[3][3];
minMatrisFunktion( matrix, 3);
}
void minMatrisFunktion( int matrix[], cols)
{
// vill komma åt element matrix[2][2]
int tal = matrix[ 2 + (2*cols) ];
}
Du får alltså räkna ut vilket element i en 1-dim-array som rad-kolumn-angivelse i din matris motsvarar.
SDCdMedlem sedan jan. 2001712 inlägg
Hmm, det var en variant. Jag gjorde en variant med en array av structs där jag lagrade första och andra värdet. Verkar fungera som jag tänkt .
Tack för tipsen!
BeatboxMedlem sedan okt. 20012 496 inlägg
void tilldela(int **pplan, int grund);
Funkar inte detta då ?
SDCdMedlem sedan jan. 2001712 inlägg
Se där ett till tips! Hur tolkas de två asteriskerna?
BeatboxMedlem sedan okt. 20012 496 inlägg
På samma sätt som en asterisk, dvs du kan indexera arrayen mha pplan[0][1]. Va bara noga med att hålla reda på så du inte överstiger arrayens storlek.
SDCdMedlem sedan jan. 2001712 inlägg
Tackar och bugar för tipsen