2012-03-05 12 views
1

は、私は私のクラスのために、このプログラムのメモリマップを作成することとしていますが、私はそれをコンパイルしようとすると、私はエラーを取得:ポインタと構造問題

invalid operands to binary expression ('double *' and 'double *') 

私は学生ですが、行ってくださいメモリ位置を印刷するためのコードを編集しないで、私はそれを自分で書く必要があります。

main() 
{ 
double testd; 
int testi; 
FILE *fpt; 

struct frog { 
    double *x, y; 
}frog; 

struct frog turtle, *apple, tv[3]; 

testi = 2; 

apple = &turtle; 
apple->x = &testd 

*(turtle).x = 7.3; //this is where im getting the error. 
(*apple).y = 3.6; 

turtle.y = 1.5; 

for (testi = 0; testi < 3; testi++) 
    tv[testi].x = &(tv[(testi+1)%3].y); 

*(tv[1].x) = 6.4; 
} 

答えて

2

前の行の末尾に;がありません。

あなたはではありません。は、*(turtle.x)の代わりに*(turtle).xを参照解除するのに間違っています。 .演算子は*演算子より高い優先順位を持ちます。つまり、これらの2つのステートメントは同等であり、かっこは必要ありません。*turtle.xを実行するだけです。

precedence orderingについては、このサイトをご覧ください。

2

前の行の末尾に;がありません。

コンパイラは、行頭にある*を乗算記号として解釈し、うまくいかないために文句を言います。

+0

おもしろいことに、 'x'が(' apple-> x =&testd * turtle.x = 7.3; ')のポインタであるのでなければ、二重の代わりに二重。 'apple-> x'がダブルで、プログラムがコンパイルされていれば、デバッグ**地獄**を想像してみてください! –

0

apple->x = &testdの文の後に;と忘れてしまっただけです。

サイドノートでは、Cでは構造体の前にstructと言う必要があり、main関数は整数を返すことになっています。また、使用するデータ構造や関数の宣言(つまり、stdio.h)を含むヘッダファイルを含める必要があります。 //コメントスタイルはC99であり、Cプログラマは実際にはそれを使用していません。/* */コメントは素晴らしいです。