c語言強化訓練筆記2010 5 9

2021-05-22 12:43:43 字數 1504 閱讀 6449

下面是關於函式指標的一些資料

函式指標是指向函式的指標變數。

因而「函式指標」本身首先應是指標變數,只不過該指標變數指向函式。這正如用指標變數可指向整型變數、字元型、陣列一樣,這裡是指向函式。如前所述,c在編譯時,每乙個函式都有乙個入口位址,該入口位址就是函式指標所指向的位址。有了指向函式的指標變數後,可用該指標變數呼叫函式,就如同用指標變數可引用其他型別變數一樣,在這些概念上是一致的。函式指標有兩個用途:呼叫函式和做函式的引數。函式指標的宣告方法為:

資料型別標誌符 (指標變數名) (形參列表);

我們通過(*(int far *)+位址)這樣的**實現了訪問任意一段記憶體的資料,那麼可以通過函式指標實現執行任意一段**

首先在debug下用a命令在一段安全的空間中寫入一段程式,然後用u命令反彙編得到這段程式的機器碼

c:/minic>debug

-a 0:200

0000:0200 mov ax,b800

0000:0203 mov es,ax

0000:0205 es:

0000:0206 mov byte ptr [0690],61

0000:020b retf

0000:020c

-u 0:200

0000:0200 b800b8        mov     ax,b800

0000:0203 8ec0          mov     es,ax

0000:0205 26            es:

0000:0206 c606900661    mov     byte ptr [0690],61

0000:020b cb            retf

在c語言編寫程式,將這段機器碼寫入到乙個陣列中,然後在main函式中將陣列拷貝到0:200這段安全的空間中,再定義乙個指向0:200的函式指標,通過呼叫函式指標來執行陣列中的這一段程式

void (far *p)();

char a[20]=;

main()

上面這個程式並沒有定義函式,而是通過函式指標呼叫了一段空間中的程式

可以改進這個程式,不需要將陣列中的機器碼拷貝到安全空間中,只要直接呼叫陣列的首位址就可以

char a[20]=;

main()

既然變數本質是某塊記憶體空間的名稱,那麼可以省略函式指標變數p,直接使用位址來呼叫陣列中的程式

char a[20]=;

main()

還可以做的更簡單

char main[20]=;

c語言強化訓練作業整理1

1 將乙個數 0x11ff 列印,再將它作為指標列印指向的記憶體單元中的值,再將所指向的記憶體單元的值再作為位址列印指向的記憶體單元的值,重複這個過程。main 2 編寫乙個結構體,列印結構體的首位址,再列印結構體中每個數的首位址,然後將結構體按照乙個位元組乙個位元組列印出來main struct ...

Python強化訓練筆記 六 讓字典保持有序性

python的字典是乙個非常方便的資料結構,使用它我們可以輕易的根據姓名 鍵 來找到他的成績,排名等 值 而不用去遍歷整個資料集。例如 但是在使用字典的過程中產生了一些問題,那就是,字典本身是不管你錄入的順序的 d d lee 1,100 d jane 2,98 d tom 3,96 d 當有這種需...

秋季集訓第2周訓練筆記

1.二維陣列鄰接矩陣儲存 鄰接矩陣的參考程式段 include using namespace std int i,j,k,e,n double g 101 101 double w intmain return0 初始化陣列大可不必使用兩重for迴圈。如果是int陣列,採用memset g,0x7...