示例1:
void myfun(int x); //我們一開始只是從功能上或者說從數學意義上理解myfun這個函式,知道myfun函式名代表的是乙個功能(或是說一段**)。函式名到底又是什麼東西呢?宣告也可寫成:void myfun( int );
intmain()
void myfun(int
x)
函式指標變數
乙個資料變數的記憶體位址可以儲存在相應的指標變數中,函式的首位址也以儲存在某個函式指標變數中。這樣,我就可以通過這個函式指標變數來呼叫所指向的函式了。
在c系列語言中,任何乙個變數,總是要先宣告,之後才能使用的。函式指標變數也應該要先宣告。
函式指標變數的宣告:
void (*funp)(int) ; //宣告乙個指向同樣引數、返回值的函式指標變數。
(整個函式指標變數的宣告格式如同函式myfun的宣告處一樣,只不過——我們把myfun改成(*funp)而已,這樣就有了乙個能指向myfun函式的指標了。當然,這個funp指標變數也可以指向所有其它具有相同引數及返回值的函式。)
示例2:
#include #include輸出:void (*funp)(int); //
宣告也可寫成void(*funp)(int x),但習慣上一般不這樣。
void (*funa)(int
);void myfun(int x); //
宣告也可寫成:void myfun( int );
intmain()
void myfun(int
x)
總結:
1、 其實,myfun的函式名與funp、funa函式指標都是一樣的,即都是函式指標。myfun函式名是乙個函式指標常量,而funp、funa是函式數指標變數,這是它們的關係。
2、但函式名呼叫如果都得如(*myfun)(10)這樣,那書寫與讀起來都是不方便和不習慣的。所以c語言的設計者們才會設計成又可允許myfun(10)這種形式地呼叫(這樣方便多了,並與數學中的函式形式一樣)。
3、 為了統一呼叫方式,funp函式指標變數也可以funp(10)的形式來呼叫。
4、賦值時,可以寫成funp=&myfun形式,也可以寫成funp=myfun。
5、但是在宣告時,void myfun(int )不能寫成void (*myfun)(int )。void (*funp)(int )不能寫成void funp(int )。
6、函式指標變數也可以存入乙個陣列內。陣列的宣告方法:int (*farray[10]) ( int );
示例3
#include #include輸出:void (*funp)(int
);void (*funa)(int
);void myfun(int
x);int
main()
void myfun(int
x)
總結:
1、函式指標變數跟普通的指標一樣在32位系統下大小都為4。但是函式指標常量的大小為1.
2、函式指標變數和函式指標常量儲存在記憶體的不同位置。
3、為負值的函式指標變數(全域性)的值為0。
函式指標作為某個函式的引數
既然函式指標變數是乙個變數,當然也可以作為某個函式的引數來使用的。
示例:
#include #include輸出:typedef
void(*funtype)(int
);//
前加乙個typedef關鍵字,這樣就定義乙個名為funtype函式指標型別,而不是乙個funtype變數。
//形式同 typedef int* pint;
void myfun(int
x);void hisfun(int
x);void herfun(int
x);void callfun(funtype fp,int
x);int
main()
void callfun(funtype fp,int
x)void myfun(int
x)void hisfun(int
x)void herfun(int
x)
深入理解C語言 深入理解指標
關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...
深入理解C語言 深入理解指標
關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...
C語言指標深入理解
前幾天看了乙個程式,裡面一段關於指標的 讓我非常糾結,看了很久才看懂,在這裡將將其記錄下來,希望能對大家有一定的幫助,先看示例程式 編譯器gcc include include include typedef struct list node list node,list,plist node st...