2016-10-14 17 views
-2

多次元行列にスペースを割り当てるときに構文エラーが発生します。私はCでコーディングするのが新しいので、何かが助けになります。このエラーは、read_matrix関数の行列構造要素にアクセスしようとしたときに発生します。構文エラーは、 "式は構造体または共用体型でなければなりません"。エラーが発生した場所はread_matrix関数でコメントアウトされています。Cで関数呼び出しとパラメータを使用してポインタを使用するときの構文エラー

typedef struct { 

int *elements; 
int rows; 
int columns; 

} matrix; 

void main() { 

matrix a, b, c; 

void read_matrix(matrix *); 
void deallocate(matrix *); 
void print(matrix); 
matrix add(matrix, matrix); 
matrix subtract(matrix, matrix); 
matrix multiply(matrix, matrix); 

read_matrix(&a); 
read_matrix(&b); 

c = add(a, b); 

deallocate(&c); 
c = subtract(a, b); 

deallocate(&c); 
c = multiply(a, b); 

} 

void read_matrix(matrix *z) { 

int d1, d2, i, x, y, val; 

printf("What is the first dimension of the array? "); 
scanf("%d", &d1); 

printf("What is the second dimension of the array? "); 
scanf("%d", &d2); 

*z.elements = (int *)calloc(d2, sizeof(int)); 
*z.rows = d1; 
*z.columns = d2;   
    /* error here. It isn't letting me access the 
     elements/rows/columns of the matrix */ 

/* additional code below here */ 
} 
+0

することになって、構文エラーがあるのですか?である必要があり、あなたのケース –

+0

C#のようには見えません...あなたの教科書に書かれている言語の名前を確認してください。 –

+0

@AlexeiLevenkov OPはすでにそれがcだと述べています。無関係なタグを削除しました。 –

答えて

1

オペレータ.あなたは* - と - .組み合わせを使用して、ポインタzを通じて構造体のメンバにアクセスする場合は、括弧を使用する必要があることを意味単項演算子*、より高い優先順位を持ちます。また、それは

(*z).elements = ... 

代わりにあなたが->オペレータ

z->elements = ... 

を使用することができ、int main()、ないvoid main()

+0

ありがとう、これは私の問題を修正! @ –

+0

@M。ダイエット:コードには他の問題もあります。 'd1'が行列のメモリ割り当てにどのような影響を与えるのか分かりません。それは実際にはありません。これは、間違っているように見えます。なぜなら、行列のメモリ割り当ては通常、行列の両方のサイズに依存するからです。 – AnT

+0

はい、私は上記のコメントにもそれを認識させました。アドバイスありがとう! –

関連する問題