Hallo und zwar habe ich folgendes problem ich will ein array ( int a [5] [5] )an ein unter programm übergeben. ich habs mit dem auf ruf
frey ( a [i] [j] ) probiert funzt aber net. ich benutze ms visual 6.0
THX
Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge
In der aufgerufenen funktion muss der array parameter genau so definiert werden, wie das array (der erste index darf auch leer sein).
Also bei
int a[5][5];
muss es heißen:
void func(int a[][5]);
oder auch
void func(int a[5][5]);
Wobei die erste 5 nur eine dekoration ist und nicht als legale obergrenze erkannt wird (für solche überprüfungen ist C/C++ denkbar die schlechteste wahl).
Tatsächlich ist im o.g. beispiel a ein array aus 25 int werten, wobei der kompiler einem den zugriff darauf erleichter, indem man schreiben kann "a[i][j]" statt "a[i*5+j]". Genau das macht nämlich der kompiler daraus und auch in den funktionen werden die angegebenen grenzen für die multiplikationen benutzt.
Beispiel:
mit
a[5][10][20][30];
wird dann beim zugriff auf
a[i][j][k][l];
intern das daraus (tatsächlich wohl optimiert, aber grundsätzlich):
a[i*10*20*30+j*20*30+k*30+l]
Damit ist auch klar, warum die größe in der ersten stelle bei der funktionsdefinition nicht angegeben werden muss. Die zahl wird einfach beim multiplizieren nicht gebraucht und gibt eigentlich nur die obergrenze für i an (zu grenzwerten s.o.).
Zum schluss noch ein funktionierendes beispiel für feste arrays. (die ausgewählte stelle erscheint negativ).
int a[5][5];//kann auch local in z.b. main() sein und darf auch beliebig heißen.
void func(int a[][5], int i0, int j0){//a willkürlich gewählt
int i, j;
for(i=0;i for(j=0;j if(i==i0 && j==j0)
printf("%d\t", -a[i][j]);
else
printf("%d\t", a[i][j]);
}
printf("\n");
}
printf("Ende.\n");
}
int main(int argc, char* argv[]){
int i, j;
for(i=0;i for(j=0;j a[i][j]=10*i+j;
}
}
func(a, 1, 2);
return 0;
}
mr.escape