2009-03-21 7 views
0

私は、typedefのを持っている:typedef配列のインデックス作成動作が混在していますか?

typedef unsigned char MyType[2]; 

は、私は、関数に渡すと、結果はFAILです! 1つのバイトのインデックス作成にmain()作品における

void f(MyType * m) 
{ 
*m[0] = 0x55; 
*m[1] = 0x66; 
} 

void main(void) 
{ 
Mytype a; 
a[0] = 0x45; 
a[1] = 0x89; 

f(&a); 
} 

可変aの操作のでaは{0x45、0x89}に等しいです。しかし、関数fでは、インデックスは2バイト(sizeofの型)で動作します。

したがって、関数fでは、*m[1]は実際にはメモリを範囲外に変更しています。

なぜこれは、私は何を忘れていますか?

ありがとうございました。

答えて

4

試してみてください。代わりに*m[1]

1

ああの

(*m)[1] 

がちょうどあきらめた後、それを働きました!ブラケットボーイ、ブラケット。

void f(MyType * m) 
{ 
(*m)[0] = 0x55; 
(*m)[1] = 0x66; 
} 

void main(void) 
{ 
Mytype a; 
a[0] = 0x45; 
a[1] = 0x89; 

f(&a); 
} 
+0

なぜtypedefが最初ですか? (* m)[0]は醜いです。 – sigjuice

+0

私は、埋め込みアプリケーション用のAPIに取り組んでおり、パブリックインターフェイス用のtypedef配列を、配列サイズのプログラミングヒントとして実験しています。これは、ドキュメントを読んだり、EclipseのようなIDEを使用してdevに通知したりしています。だから、不安定さは入り口にある。 – Oliver

+0

この質問を今ここに見るのは恥ずかしいことだ。とにかく私はそれを試してみて、それは良い考えではないと決めた。 – Oliver

関連する問題