Dies ist der Code:Passing multidimensionalen Arrays von Leeren Funktionen
#include <stdio.h>
int funk1()
{
int N=0;
float a;
FILE *f;
f=fopen("wyniki.txt", "r");
while(fscanf(f,"%f", &a)!=EOF)
{
N++;
}
fclose(f);
return N;
}
void funk2(int N, float T[][N])
{
FILE *f;
f=fopen("wyniki.txt", "r");
float a;
int i=0;
while(fscanf(f,"%f", &a)!=EOF)
{
T[i][0]=a;
T[0][i]=a;
printf("funk 2\n");
printf("liczba = %f i = %d \n", a, i);
printf("%f %f\n", T[i][0], T[0][i]);
i++;
}
fclose(f);
}
main()
{
int N = funk1();
float T[N][N];
funk2(N,T[][N]);
int i=0;
int j=0;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("|%f|\t",T[i][j]);
}
printf("\n");
printf("|%f|\t", T[i][j]);
}
getch();
return 0;
}
Das Problem ist nur mit funk2. Ich möchte die Matrix (T) von main zu funk2 übergeben, Sachen damit machen und sie dann an main zurückgeben. Ich habe keine Ahnung, wie man das macht, um ehrlich zu sein, ich habe es nur ausprobiert, aber es funktioniert nicht. Irgendeine Idee, wie man das macht? Soll ich mehr Informationen liefern oder reicht das? Sie können auch die erste Funktion und die erste Hälfte von funk2 ignorieren. Alles funktioniert gut, das Problem, das ich habe nur mit dem zweidimensionalen Array zu übergeben.
Das Ergebnis dieses Code ist ein Fehler in
funk2(N,T[][N]);
(erwarteten Ausdruck bevor ']' token).
ein N Hinzufügen ergibt in
expected 'float (*)[(sizetype)(N)]' but argument is of type 'float'
Das hat funktioniert :) Danke! Könnte ich dazu noch etwas mehr wissen? – ImReallyBadAtCoding
@ImReallyBadAtCoding: Der * Ausdruck * 'T' hat den Typ' float [N] [N] ', daher weiß der Compiler, dass es sich um einen Array-Typ handelt. –
Es ist wichtig zu erkennen, dass wenn Sie ein "Array" an eine Funktion übergeben, Sie das Array nicht wirklich passieren, sondern einen Zeiger auf das erste Element übergeben. Also ist das Argument 'float T [] [N]' wirklich 'float (* T) [N]', und der Compiler ändert es still für Sie. –