2017-01-04 3 views
0

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' 

Antwort

2

Die einzige Zeit [] ist gültige Syntax wird, wenn ein Array deklariert entweder mit einem Initialisierer oder als Funktionsparameter.

Wenn Sie ein Array an eine Funktion zu übergeben wollen, nur um es passieren:

funk2(N,T); 

Sie brauchen nicht die Dimensionen des Arrays zu rufen. Der Compiler weiß, dass es ein Array ist.

+0

Das hat funktioniert :) Danke! Könnte ich dazu noch etwas mehr wissen? – ImReallyBadAtCoding

+0

@ImReallyBadAtCoding: Der * Ausdruck * 'T' hat den Typ' float [N] [N] ', daher weiß der Compiler, dass es sich um einen Array-Typ handelt. –

+0

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. –

Verwandte Themen