C 變數判定的螺旋法則

2022-02-06 08:04:03 字數 1839 閱讀 2212

c++ 中乙個識別符號配合著各種修飾界定符,使得識別符號的本意不那麼直觀一眼就能看出,甚至需要仔細分析,才能知道該識別符號的具體你含義。

比如:

void (*signal(int, void (*fp)(int)))(int);

其中signal是什麼?

對於如何進行變數的辯識,有個非官方的 「順時針/螺旋法則(clockwise/spiral rule)」 可用來幫助辯識。

該法則的內容,簡單來說,為了搞清楚乙個未知識別符號的含義,我們可以:

從我們需要判定的識別符號開始,順時針畫圈,遇到如下符號時,用對應的語義替換:

重複上面的步驟直到語句中所有符號都被遍歷過。

始終優先解析括號括起來的部分。

先從乙個簡單的開始,判定如下語句中str的含義:

+-------+

| +-+ |

| ^ | |

char *str[10];

^ ^ | |

| +---+ |

+-----------+

根據螺旋法則,如上面線圖標識所示,

回到文章開頭那個語句,來判定其中signal的含義。

+-----------------------------+

| +---+ |

| +---+ |+-+| |

| ^ | |^ || |

void (*signal(int, void (*fp)(int)))(int);

^ ^ | ^ ^ || |

| +------+ | +--+| |

| +--------+ |

+----------------------------------+

由螺旋法則畫出如上的線圖,進而可分析:

路徑跑到signal的螺旋中,遇到*(緊鄰signal左邊),所以signal

返回值為指標

再繼續,遇到(,接上面,返回值為指向另一函式的指標,被指向的這個函式接收乙個int入參。

最後,遇到voidsignal返回值指向的這個函式的返回值為空。

最後捋一下signal的完整型別為:接收乙個int,乙個指向接收乙個int並且返回值為空的函式的指標,這兩個引數的函式,並且返回值為指向乙個接收int型返回為空的函式...orz。

螺旋施法沒有給出在const參與的情況下的判定,不過因為const預設修飾緊鄰其左邊的元素,如果右邊無元素,則修飾左邊的元素。因此只需要將 const 和它修飾的元素作為整體來看,就還是可以使用螺旋法則的。

考察如下語句:

const

int*const

method3(const

int*const&) const;

當函式後面緊跟乙個const時,表示該成員函式的作用域內*this是常量,即無法在該函式體內對所類的實體進行修改。

下面對上面的語句進行分析:

關於PHP中變數的判定

由於php解釋性語言,所以乙個變數即使沒有定義也可以被使用而不會引起error。請看下面這個例子 輸出的結果是 empty no set null no defined case 0 有其實最後乙個switch判斷,這是乙個比較隱晦的錯誤,所以在使用前進行一次判斷還是有意義的。同時我們可以看到有些的...

C語言素數的判定

題目描述 輸入乙個正整數n,判斷n是否是素數,若n是素數,輸出 yes 否則輸出 no 輸入輸入乙個正整數n n 1000 輸出如果n是素數輸出 yes 否則輸出 no 輸出佔一行。樣例輸入 2樣例輸出 yes include include intmain if b a n 1 如果1到n的平方根...

C 的n n螺旋輸出陣列

開發工具與關鍵技術 visual studio c 在這裡用到的二維動態陣列遍歷,通俗易懂。include include factorial.h using namespace std void show int a,int n cout endl cout endl 5 5順序 void fac...