控制表
控制表的例子

以下的範例是以四則運算為例，為簡單起見只接受一個輸入，範例的目的只是展示如何用控制表來取代一般程式的指令來調整控制流程。控制表也可以接受多個輸入，若利用有層次的連結式控制表，也可以達到結構化程式設計的目的（可能可以使用縮排來突顯控制表中的副程式）。
CT1的控制表是一個簡單的查找表，第一欄是要測試的資料，若資料等於第一欄的數值，會執行第二欄指定的副程式。實務上這就是一個多路分支的形式來進行，也是一種動態分配（英语：）的形式，最後一列是對應資料不符合任一數值時的處理。
CT1
| 輸入1 | 指標 |
| --- | --- |
A: -->Add
S: -->Subtract
M: -->Multiply
D: -->Divide
?: -->Default
static const char  CT1[] = {  "A",   "S",        "M",        "D" };                          /* permitted input  values */
 static const void *CT1p[] = { &&Add, &&Subtract, &&Multiply, &&Divide, &&Default};           /* labels to goto & default*/
 for (int i = 0; i < sizeof(CT1); i++)      /* loop thru ASCII values                                                    */
   {if (x == CT1[i]) goto *CT1p[i]; }       /* found --> appropriate label                                               */
 goto *CT1p[i+1];                           /* not found --> default label                                               */
若控制表改為一個有256個元素的一維陣列，直接將數值轉換為對應副程式的編號，即利用元素大小為位元組的陣列進行索引映射（英语：），可以在常數時間  O(1)\,內找到對應的副程式，CT1p陣列也可以用指向副程式的指標代替標記，就不需用到goto指令，但因為呼叫副程式需要的系統服務（英语：）較多，會對程式性能略為影響。
static const void *CT1p[] = {&&Default, &&Add, &&Subtract, &&Multiply, &&Divide};
 /* the 256 byte table, below, holds values (1,2,3,4), in corresponding ASCII positions (A,S,M,D), all others set to 0x00 */
 static const char CT1x[]={
             '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x01','\x00','\x00','\x04','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x03','\x00','\x00',
             '\x00','\x00','\x00','\x02','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x00','\x00','\x00','\x03','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
             '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00'};
 /* the following code will execute in constant time, irrespective of the value of the input character (x)                    */
 i = CT1x(x);            /* extract the correct subroutine index from table CT1x using its ASCII value as an index initially  */
 goto *CT1p[i];          /* goto (Switch to) the label corresponding to the index (0=default,1= Add,2= Subtract,.) - see CT1p */
以下的例子說明只要程式語言支援依編號分支到各副程式的語法（副程式放在一個啟始編號為0的陣列中），就可以達到類似上述程式的二維控制表的效果。下例中用陣列CT2來決定指標陣列CT2P的編號，若程式語言不支援指標陣列，也可以用類似SWITCH指令的方式處理，SWITCH指令中可以直接處理輸入，或是跳到對應的副程式再處理輸入。
CT2
| 輸入 1 | 副程式編號 |
| --- | --- |
A: 1
S: 2
M: 3
D: 4
?: 0
| 指標陣列 |  |
| --- | --- |
-->default: 
-->Add: 
-->Subtract: 
-->Multiply: 
-->Divide: 
-->?other: 
以下的例子不使用實際的程式碼，只用二個陣列來表示，只要是支援依編號分支到陣列中（陣列是從0開始編號）特定副程式的程式語言皆可適用。可利用陣列CT2將輸入的資料轉換為副程式陣列（CP2）的編號，若此程式語言不支援指標，也可以用類似SWITCH指令的作法取代CP2陣列的查表，依序將輸入值和每一個可能的資料比對，若資料符合，跳到對應的副程式中。
CT2
| 輸入1 | 副程式編號 |
| --- | --- |
A: 1
S: 2
M: 3
D: 4
?: 0
此例可以在不使用查表法的情形下，很有效率的將ASCII輸入資料（A、S、M、D或其他）轉換為指標陣列的編號，不過為了和上例一致，仍使用陣列表示。
| 指標陣列 |  |
| --- | --- |
-->default: 
-->Add: 
-->Subtract: 
-->Multiply: 
-->Divide: 
-->?other: 
也可以配合實際的應用，創造有更多欄位的控制表，控制表會比上例複雜，但可以在更多測試輸入時有更多測試條件的組合，而不是只比對單一測試條件。以下的控制表有增加一個輸入資料（小寫的a、s、m、d），若輸入滿足其中一個資料，該測試條件就成立，也就會進行對應的動作，另外也增加一欄來計算實際執行時各個條件成立過幾次。
CT3
| 輸入1 | 替代輸入 | 副程式編號 | 計數 |
| --- | --- | --- | --- |
| A | a | 1 | 0 |
| S | s | 2 | 0 |
| M | m | 3 | 0 |
| D | d | 4 | 0 |
| ? | ? | 0 | 0 |
上述的控制表更接近過程化編程中用到的條件指令，不過實際語言中用到的一些指令已轉換為處理控制表的「直譯器」程式，控制表只看到各個輸入及其對應的副程式編號。

結構化程式設計或是「無Goto代碼」也可以配合經過適當設計及縮排的控制表結構使用。