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;
...
}
10 svar · 383 visningar · startad av SDCd
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().
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;
...
}
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.
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.
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().
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.
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!
Se där ett till tips! Hur tolkas de två asteriskerna?
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.
Tackar och bugar för tipsen