[問題] 傳入參數的型別

看板C_and_CPP作者 (Linux藍海帝國)時間13年前 (2011/05/13 00:46), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串1/1
使用的環境: Ubuntu 11.04 i386 寫 openGL 的時候突然想到的... 但這個問題與 openGL 無關 XD openGL 要處理鍵盤的輸入時, 要調用此函式: void glutSpecialFunc(void (*func)(int key, int x, int y)); 我寫了一個函式如下: void my_func(int key, int x, int y) { ... } 我的使用方式如下, 已確認可以正常運作. glutSpecialFunc(my_func); 但我突然注意到, glutSpecialFunc 的參數有一個 (*func) <== 一個星號 * 所以我改成以下的方式, 也可以正常運作 !! glutSpecialFunc(&my_func); // 多一個 & 運算子 這讓我感到很困惑... 故做了以下實驗: printf("A: %08x\n", (unsigned)my_func); printf("B: %08x\n", (unsigned)(&my_func)); 結果顯示這兩個值是相同的. 我想問的是 my_func 和 &my_func 究竟有什麼差異呢 ? 還有 為何上述那兩個值會相同 ? ps: 對於一個變數 int my_var, 我知道 my_var 和 &my_var 在記憶體操作的差異 但對於函式而言, 我就不清楚了... 先謝謝強者前輩的解惑 ^_^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.244.203

05/13 00:52, , 1F
沒有差別
05/13 00:52, 1F

05/13 01:23, , 2F
沒有差別 函數名稱代表的就是自己函數的位址
05/13 01:23, 2F

05/13 02:47, , 3F
一言難盡, 不一樣但是中間有動一些手腳, 像是傳陣列也
05/13 02:47, 3F

05/13 02:47, , 4F
是如此, http://goo.gl/IwpPK 參考 6.3.2.1 part 4
05/13 02:47, 4F

05/13 02:47, , 5F
跟 6.7.8 part 10, 關鍵字 function designator
05/13 02:47, 5F

05/13 02:52, , 6F
還有你要印指標的值要轉成 void* 而不該是 unsigned,
05/13 02:52, 6F

05/13 02:54, , 7F
大小夠不夠都是個問題了, 而且也不保證能夠轉成功
05/13 02:54, 7F

05/13 07:42, , 8F
這好像叫作 『函數指標』 ?
05/13 07:42, 8F
文章代碼(AID): #1Dp0xOJA (C_and_CPP)