回覆列表
-
1 # TonyDeng
-
2 # 工控機電知識
計算機的函式,是一個固定的一個程式段,或稱其為一個子程式,它在可以實現固定運算功能的同時,還帶有一個入口和一個出口,所謂的入口,就是函式所帶的各個引數,我們可以透過這個入口,把函式的引數值代入子程式,供計算機處理;所謂出口,就是指函式的函式值,在計算機求得之後,由此口帶回給呼叫它的程式。
你可以和數學函式做比較,有相似之處。數學上函式就是一個或者幾個變數透過固定的運算規則運算可以得到一個結果的式子,對吧,計算機上的函式也一樣,是一個軟體概念,也是透過對一個或者幾個資料進行處理得到一個結果或者只執行操作但沒有結果的完整程式程式碼段。這樣的程式碼段可以被重複引用而不必針對每次解決相同問題的需求而撰寫重複類似的程式碼了。比如你要算三個數的和,就可以寫一個函式:int AddThreeNum(int a, int b, int c){ return a+b+c;}這樣以後程式裡每次要使用求三個數的和,你都可以這樣引用:int a;a = AddThreeNum(1, 4, 12);
此外sin(30)=0.5,這裡的30就是函式的引數值,它將由入口傳給計算機,供計算機處理,而0.5就是函式值,它將由出口返回給呼叫這個函式的程式。另外,我們數學裡的函式是固定的那些,而計算機中的函式,可以根據其運算功能,由我們自己去定義,只要是運算功能是固定的,我們就可以把它定義成一個函式,這樣可以避免相同的程式段在程式中重複出現,在需要它時,只需要呼叫相應的函式就行了。這樣不僅可以使我們編寫的程式精簡,而且可以使我們的程式更富有可讀性。
總之計算機就是如同我們數學算數一樣,從計算機調出某個命令,去實現函式功能的。
函式功能是程式設計師實現的,計算機只執行程式設計師編寫好的指令。
函式在程式底層,只是一段指令,它有一個入口,入口處有約定的引數棧,呼叫函式的時候,是讓計算機把指令指示器轉到這個入口處,然後在引數棧中按約定規則填入引數(這就是C語言能夠用函式指標的道理),之後的指令會在此處依次執行指令,遇到return指令,就把返回值填在指定資料區,呼叫者自己去提取資料。
函式,其實不過是一段程式,做什麼都可以,C語言一個程式本身就被視為是一個main()函式,所以它能夠實現什麼功能和目的,是沒限制的。函式的英文單詞是function,就是“功能”的意思,不是數學上狹義的函式概念,意思是一個實現某種或某些功能的黑盒子,不用管它裡面是怎麼做的,只要知道由某種輸入會得到某種輸出就可以了,這也是數學上廣義的函式概念。
程式設計上函式的實現,最根本的目的是封裝一些具體過程,讓程式設計者從過於具體的細節中解放出來,閱讀程式碼時看函式實現什麼就可以了,不需要去考察它的細節,除非它做錯了事要排查故障,做好了一個函式,就可以反覆用,不需要重複去寫同樣或類似的功能程式碼。
函式在早期的語言中,有function和procedure的區別,如BASIC,前者有返回值,後者沒有,但實際上是沒差別的,所以到C語言,乾脆只有函式function,只是沒返回值時用void來表示此函式不返回什麼(但實際上並不妨礙呼叫者在返回資料區拿到什麼,這是程式給作業系統返回資料的方法,C程式main()的返回值就是這麼用的,不寫return,哪怕是void main(),也有其他手段return給呼叫者)。