Faktum är din kod är korrekt förutom att du har ett stort M på Main, när det borde vara main
I C++ så skickas alla funktionsargument som ett värde. När det gäller arrayer så skickas addressen till arrayen, vilket innebär att din kod faktiskt fungerar.
När det gäller referenser så fungerar de ungefär som pekare. Om vi t.ex. har följande funktion:
void f(int arg)
{
arg = 4;
}
int i = 3;
f(i);
Då kommer värdet av i efter funktionanropet fortfarande vara 3, eftersom endast i:s värde skickades som argument till funktionen. Om vi istället använder pekare så får vi:
void f(int *arg)
{
*arg = 4;
}
int i = 3;
f(&i);
Då skickar vi addressen av i som argument till funktionen, där &-operatorn helt enkelt tar fram addressen till variabeln. Vi kan därför inte ändra på vad pekaren som skickas in pekar på, men vi kan ändra på det som pekaren pekar på med hjälp av *-operatorn, och i kommer därför att ha värdet 4 efter funktionsanropet. Variabler och pekare har funnits med sedan vanliga C, men i C++ så introducerades även referenser. En referens är egentligen bara så kallat "syntaktiskt socker" för pekare som gör det enklare att använda pekare. Om vi istället använder en referens så ser det ut så här:
void f(int &arg)
{
arg = 4;
}
int i = 3;
f(i);
Även i detta fallet kommer i efter funktionanropet att ha värdet 4. En referens fungerar alltså ungefär som en pekare, men man behöver inte använda & och *-operatorerna. En referens är alltså en pekare i botten, med syntaxen är lite enklare.
När det gäller arrayer så kan man inte skicka ett helt block med data som argument till en funktion i C++, så istället så skickas addressen till arrayen.
När det gäller resten av din kod så är det inte vidare snyggt att använda globala for-iteratorer. Gör istället om n och m till konstanta värden som talar om storleken på brädet, och använd dem i looparna:
const int N = 3; // Globala konstanter brukar vanligvis skrivas med stora bokstäver
const int M = 3;
int board[N][M];
void Initialize(board[N][M])
{
for(int i = 0; i < N; ++i)
{
for(int j = 0; j < M; ++j)
{
board[N][M] = 0;
}
}
}
Ännu bättre vore att kapsla in allt som har med brädet i en egen klass, men det blir väl en senare lektion antar jag