スパイラルリーディングルール

「Clockwise / Spiral Rule」として知られる手法により、プログラマーはC言語宣言を解析できます。



次の簡単な手順に従ってください。



1.未知の要素から始めて、スパイラル/時計回りの方向に移動します。 同時に、次の要素を適切なフレーズに置き換えます。



2.すべての要素が完了するまで、らせん/時計回りに移動します。

3.括弧内の式を常に最初に許可します!



例1:シンプルな広告



+-------+<br>

| +-+ |<br>

| ^ | |<br>

char *str[ 10 ];<br>

^ ^ | |<br>

| +---+ |<br>

+-----------+<br>









strとは何ですか?

strは...


strで始まるスパイラル/時計回りに移動します。最初に表示される文字は '['で、これは配列です。

strは、タイプ10のサイズ10の配列です。


スパイラル/時計回りに動き続け、次に出会うのは記号「*」です。これはポインターがあることを意味します。

strは、サイズ10の配列で、...へのタイプポインターです。


らせん状に移動し、行の終わりを見るため、先に進み、「char」タイプを確認します。

strは、char型のポインターのサイズ10の配列です。


すべての要素、つまり それだけです、この式を作りました!



例2:関数ポインターの宣言



+--------------------+<br>

| +---+ |<br>

| |+-+| |<br>

| |^ || |<br>

char *(*fp)( int , float *);<br>

^ ^ ^ || |<br>

| | +--+| |<br>

| +-----+ |<br>

+------------------------+<br>







fpとは何ですか?

fpは...


らせん状/時計回りに移動し、最初に表示されるのは「)」です。 したがって、fpは角括弧内にあり、角括弧内でスパイラルを継続し、次の文字は「*」です。

fpは...


現在、括弧の外側にあり、らせん状に動き続けているため、「(」、つまりこれは関数であることがわかります。

fpは、intを受け取る関数へのポインターと...


らせん状に動き続けると、記号「*」に出会うので、次のようになります。

fpは、intを受け取る関数へのポインターと、...へのポインターを返すfloatへのポインターです。


らせん状に進むと、シンボル「;」に遭遇しますが、すべてのシンボルがまだ処理されていないため、続行して「char」などに遭遇します。

fpは、intを受け取る関数へのポインターと、charへのポインターを返すfloatへのポインターです。




例3:究極の



+-----------------------------+<br>

| +---+ |<br>

| +---+ |+-+| |<br>

| ^ | |^ || |<br>

void (*signal( int , void (*fp)( int )))( int );<br>

^ ^ | ^ ^ || |<br>

| +------+ | +--+| |<br>

| +--------+ |<br>

+----------------------------------+<br>







シグナルとは何ですか?

括弧内の信号に注意してください。まず、内部の式を解析する必要があります。 スパイラル/時計回りに移動すると、「(」などが表示されます。

signalは、intと...


うーん、シンボル「fp」で同じルールを使用できます。したがって、fpとは何ですか? fpも括弧内にあるため、続けて「*」が表示されます。

fpは...


スパイラル/時計回りに移動すると、「(」などが表示されます。

fpは、intを受け取り、...を返す関数へのポインタです。


スパイラル/時計回りの方向に移動すると、「ボイド」が表示されます。

fpは、voidを返すintを受け取る関数へのポインターです。


fpはこれで完了です。シグナルを続けましょう。次のようになりました。

signal-intを受け取る関数と、intを受け取り、voidを返し、...を返す関数へのポインター


私たちはまだ角括弧の中にいるので、次の文字は '*'です。

signal-intを受け取る関数、intを受け取る関数へのポインター、voidを返す、ポインターを返す...


角かっこ内の要素を許可し、らせん状に続けて記号「(」などを取得します。

signal-intを受け取る関数、intを受け取る関数へのポインター、voidを返す関数、intを受け取る関数へのポインターを返す...


最後に、私たちは動き続け、最後の文字で「ボイド」が表示されるため、完全な説明は次のとおりです。

signal-intを取り、intを取り、voidを返し、intを取り、voidを返す関数へのポインターを返す関数へのポインターを受け取る関数。




このルールは、constおよびvolatile属性の理解にも適用されます。 例:

const char * chptr;


それでは、chptrとは何ですか?

chptrはchar不変へのポインターです。


これはどうですか:

char * const chptr;


それでは、chptrとは何ですか?

chptrは、charへの不変のポインターです。


そして最後に:

volatile char * const chptr;


それでは、chptrとは何ですか?

chptrは、char volatileへの不変のポインターです。



All Articles