深入理解C語言函式指標

2022-03-02 08:17:44 字數 2419 閱讀 4261

示例1:

void myfun(int x);    //

宣告也可寫成:void myfun( int );

intmain()

void myfun(int

x)

我們一開始只是從功能上或者說從數學意義上理解myfun這個函式,知道myfun函式名代表的是乙個功能(或是說一段**)。函式名到底又是什麼東西呢?

函式指標變數

乙個資料變數的記憶體位址可以儲存在相應的指標變數中,函式的首位址也以儲存在某個函式指標變數中。這樣,我就可以通過這個函式指標變數來呼叫所指向的函式了。

在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...