Re: [問題] 函數指標

看板C_and_CPP作者 (不說對不起)時間10年前 (2015/03/22 16:35), 編輯推噓0(0014)
留言14則, 4人參與, 最新討論串2/4 (看更多)
小弟近日複習 函數指標,發現以前學的不夠徹底(汗顏...) GOOGLE了一下 如 http://www.programmer-club.com.tw/ShowSameTitleN/c/25059.html 以下借用之前的文章 懇請賜教 謝謝 ※ 引述《ohya0524 (歐爺)》之銘言: : 標題: [問題] 函數指標 : 時間: Thu Dec 29 22:04:46 2011 : : 開發平台(Platform): C : : : 問題(Question): : : 為啥四種寫法都對呢? : (某兩行可以決定是否用註解替換) : : 程式碼(Code):(請善用置底文網頁, 記得排版) : : #include<stdio.h> : : int max(int x,int y){ return (x>y?x:y); } : : int main() : { : int (*fptr)(int,int); : int a,b; : : fptr=max; //fptr=&max; 1. 自動轉型! 請問是什麼type自動轉型成什麼type? 想法: max 自動轉型成pointer 也就是說compiler 做了fptr=(int(*)(int,int))max; 2.是嗎? : scanf("%d %d",&a,&b); : printf("max=%d",fptr(a,b)); //(*fptr)(a,b) 我知道fptr跟(*fptr)的prinf出來的內容是一樣, 3.請問他們的type是否一樣? 4.這裡有哪一個也是自動轉型嗎? : return 0; : } : : : 補充說明(Supplement): : : 我的疑問... : fptr是個指標 : 那max不是應該用取址符號&取出位址嗎? : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.116.82.25 : ※ 編輯: ohya0524 來自: 140.116.82.25 (12/29 22:06) : ※ 編輯: ohya0524 來自: 140.116.82.25 (12/29 22:15) : 推 sawang:max本身就是個位址了 12/29 22:39 : → xatier:max 的「名字」本身指向自己 12/30 00:32 : → Favonia:原Po: C 標準規定很多偷偷做的轉換。這是其中一個。 12/30 01:51 : → Favonia:sawang: 自動轉換有二例外:當 & 或 sizeof 的運算元不轉 12/30 01:52 : → Favonia: (建議當無聊冷知識看過就算了 lol) 12/30 01:52 : → Favonia:xatier: 同上。實際上是不同東西,只是大多數狀況下會轉。 12/30 01:54 也就是我的問題3 是否type是不一樣? : 推 tropical72:推 F 大,本身較習慣寫 fptr=max, (*fptr)(a,b); 只是 12/30 02:02 : → tropical72:大多compiler真的都會自己轉,導致二種寫法都可以. 12/30 02:02 : 推 xatier:原來如此,感謝 F 大指點,學到了新知識! 12/30 04:01 : 推 sawang:感謝F兄指點,受益良多。:) 12/30 11:44 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.160.1.105 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1427013315.A.354.html

03/22 18:36, , 1F
問題1: max本來就是pointer,別人說過了。你說他是自動
03/22 18:36, 1F

03/22 18:36, , 2F
轉型,那反過來問你,請問max本來的「型」是什麼?
03/22 18:36, 2F

03/22 19:33, , 3F
max 本身不是 pointer
03/22 19:33, 3F

03/22 20:29, , 4F
樓上F哥講的是不是就是像陣列名稱的概念?
03/22 20:29, 4F

03/22 20:30, , 5F
就是陣列名稱就是陣列名稱,只是在Compiler裡可以當常指
03/22 20:30, 5F

03/22 20:31, , 6F
標來用? 所以a[10]的話,a跟&a代表的東西是一樣的
03/22 20:31, 6F

03/22 20:32, , 7F
a 跟 &a 也不一樣. 這已經是考古題了. 函數比陣列更複雜
03/22 20:32, 7F

03/22 20:32, , 8F
尤其有了 C++..
03/22 20:32, 8F

03/22 20:34, , 9F
這些語言規格的東西實在好難懂啊~~XD
03/22 20:34, 9F

03/22 20:37, , 10F
很多都是像原Po,可能知道行為是什麼,但是背後怎麼做的不
03/22 20:37, 10F

03/22 20:37, , 11F
太知道~~
03/22 20:37, 11F

03/22 21:36, , 12F
O~X(
03/22 21:36, 12F

03/23 00:07, , 13F
感謝各位大大回覆 to M大:自動轉型是根據推文Favonia得到
03/23 00:07, 13F

03/23 00:08, , 14F
to w大: 沒錯 知道行為是什麼 但不知道語言規格..等
03/23 00:08, 14F
文章代碼(AID): #1L3dx3DK (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 2 之 4 篇):
文章代碼(AID): #1L3dx3DK (C_and_CPP)