程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 我也要學C語言-第十六章:返回指針值的函數與指向函數的指針以及邏輯與算法分離

我也要學C語言-第十六章:返回指針值的函數與指向函數的指針以及邏輯與算法分離

編輯:關於C語言

今天一天沒學習啦!我去醫院補牙了。牙壞了,有1個洞。不過我邊補牙邊在聽中山大學的匯編語言視頻教程,雖然只能聽,但是還是有點收獲的。昨天的帖子很抱歉啦,因為裡面有個叫寶石的朋友發來疑問,我當時在學其他知識,沒有仔細的看!當時我理解錯了他的意思,我在這裡向你道歉。我學的那行代碼肯定是有問題的,但是在某些寬松的場合,可以很簡潔的去表達呢!

  C語言學到現在正好2周時間了,我覺得C語言還是蠻給力的。爭取在3個星期結束C語言的學習,當然這僅僅是在探索語法原理上的。也就是說至少我每寫一行代碼,我都知道它以何種形式存在於內存的哪個地方。我想呢!只有明白了這些以後才能逐步的去鍛煉C語言的內功。不過我們知道了語法原理後在遇到問題時,我們可以很快速的鎖定問題在在哪裡,因為我們知道了它的構架,我們就可以調試去尋找錯誤。

返回指針值的函數
  1 返回值為指針型數據的函數,定義一般的形式為:

    類型名 *函數名(參數表)

  例如:int*  func(int x, int y);

  解釋:表示func的返回值為指向int型數據的指針。

  注意點:函數名前的*只表示范圍值為指針型數據

      *func兩側沒有括號。

  返回指針值的函數的例子與調試呢,我就不寫了,因為我覺得這個還是非常簡單的了。我重點寫下面的知識點,指向函數的指針。

指向函數的指針
  為什麼會存在指向函數的指針:因為啊!函數作為一段程序,在內存中也要占據一片存儲區域呢!它就會有一個起始地址,即函數的入口地址,這個就好像世界地圖,每個國家對就像世界地圖上的1塊空間,如果從1個固定的地方往1個方向看,每個國家都會有1個地方是離你最近的,這個最近的地方就好比函數的入口地址,也就是它的起始地址啦!這個地址我們就叫它函數的指針。

  指向函數的指針有什麼作用啊:這樣一來啊,我們就可以定義一個指針變量指向函數,然後通過指針調用函數。將函數作為參數在函數間傳遞。

  使用指向函數的指針會給程序帶來什麼好處啊?:我暫時還不知道,繼續往下學,說不定就知道啦!

  既然函數有1個入口,那麼函數有多少個出口啊?出口就看return啦!有多少個return就有多少個出口哦!

     指向函數的指針變量定義:類型名 (* 指針變量名) ();

  指向函數的指針的更深入一層去理解:因為編譯器會把函數翻譯出所對於的機器代碼,那麼這個機器代碼的第一個字節的地址就是函數的                                                           首地址,也就是指向函數的指針。

  間接調用與直接調用:通過函數指針來調用函數叫間接調用,通過函數名來調用叫直接調用。

例子:

    int (*p)()

表示:p是一個指向函數的指針變量,此函數的返回值為int型。

代碼事例:

大家看了這段代碼是不是發現了1個問題啊p和Max並不相等啊,這個是為什麼啊?!當然只有加油去搜尋資料了!。。。。。。10分鐘後!原來是這樣的,大家看這個:

哦!我們明白啦!在401005這裡有個jmp跳轉。原來函數指針被歸納在一個跳表裡去啦!但是這個只是在debug方式下會這樣做哦!

我們再來看一段代碼:

#include<stdio.h>int Max(int x, int y){    return x>y?x:y;}void main(){    int a;    int (*p)(int) = NULL;    p = (int (*)(int))Max;//其中int (*)(int)這段呢!是一個數據類型,表示一個單參函數的指針,作用是把1個                         雙參函數的地址強制說成是1個單參函數的地址。    a = ((int (*)(int, int))p)(2, 9);//然後我們調用時候不行啊,因為參數不對,所以又要轉換回來!}哇!函數指針的類型轉換好郁悶啊!但是我必須要學懂!以後肯定會遇到的!

注意:由於這類指針變量等於一個函數的入口地址,所以它們做加減運算是無意義的。(嘿嘿!這句話又像譚老師!雖然我沒有看過他的書!但是我覺得呢!這些結論只是我暫時的理解!以後可能會有新的認識的!加油!!!)

邏輯與算法分離

  

大家看:這樣一來我們的算法和邏輯分開啦!這樣的話,我們想換算法,換參數就可以啦!我們把算法給參數化了!

    這一節筆記就寫到這裡了!大家一起加油!學習知識,讓生活更美好!

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved