教授から私が以前に見たことのないコードをいくつか与えました。私は下級レベルの教授に迷惑をかける前に、デュー・ディリジェンスをやろうとしています。構造体を配列で初期化する
まず、構造が定義されます。
struct entry {
char *lexptr;
int token;
};
次に、配列が定義され、初期化されます。
struct entry keywords[] = {
"div", DIV,
"mod", MOD,
0 , 0
};
どこDIV
とMOD
は#define
ディレクティブです。私の驚きには、すべてがコンパイルされ実行されます。
個人的に、私が行っていると何かの初心者のような..
struct entry keywords[3];
keywords[0]->lexptr="div";
keywords[0]->token=DIV;
//and so on
私の最初の質問は、それがそのinitメソッドの仕事をしないかのようにされて?私の推測では、配列のアドレス位置は、構造体で定義された要素の順序と一致しています。したがって、要素定義{"div", DIV,"mod", MOD, 0 , 0};
は、アドレスレベルにentry
という3つの要素をうまく収めます。
私の2番目の質問は、これは正常ですか?なぜこの方法は、配列を初期化する私のsligltyより読みやすく、より冗長なバージョンですか?最初の方法に利点はありますか?
初期設定の構文については、教科書に説明されています。はるかにクリーンで読み易く、配列内の要素数を数える必要がなくなります。私は個人的には、イニシャライザの各構造体の周りに常に{{} 'の追加レベルを追加します。 –