2012-03-09 11 views
1

私は、この読んでいた:http://johnsantic.com/comp/state.htmlをし、この部分を理解に苦労して:配列、ポインタとポインタ

void (*const state_table [MAX_STATES][MAX_EVENTS]) (void) = { 

    { action_s1_e1, action_s1_e2 }, /* procedures for state 1 */ 
    { action_s2_e1, action_s2_e2 }, /* procedures for state 2 */ 
    { action_s3_e1, action_s3_e2 } /* procedures for state 3 */ 
}; 

誰かがここで何が起こっているか説明していただけますか?

+2

。 –

+0

@ another.anon.cowardできません。構文エラー。そのサイトは一般的に私の経験では有効なCコードを扱うのが悪いです。 – Lundin

+0

@ Lundinまあ、それは定義を知らない。数字で置き換えるとうまくいきます。 – asaelr

答えて

4

ポインタ関数の2次元配列(return void)を定義します。

state_table [MAX_STATES][MAX_EVENTS]state_tableが2Dアレイであり、そしてvoid (*expression)(void)expressionが引数を取らない関数、(これは引数リストとして(void)の平均である)へのポインタであり、voidを返すことを意味することを意味します。

他の行は、配列を初期化するだけです。

+0

引数をとらない関数と返り値void: –

+0

はい。私はこれを追加します。 – asaelr

1

あなたのtypedefと非ofuscateコードならば、それは実際に読めるようになります。http://cdecl.org/は助けになることができ

typedef void (*const fptr_state) (void); 

fptr_state state_table [MAX_STATES][MAX_EVENTS] = 
{ 
    { action_s1_e1, action_s1_e2 }, /* procedures for state 1 */ 
    { action_s2_e1, action_s2_e2 }, /* procedures for state 2 */ 
    { action_s3_e1, action_s3_e2 } /* procedures for state 3 */ 
};