函式指標簡述

2021-08-09 16:47:37 字數 1543 閱讀 6284

1:函式指標的實質

a:函式指標的實質還是指標變數,不過指標指向的是函式。 

b:指標,函式指標,陣列指標都是指標。

只不過指向的內容不同。

都占用4個位元組。

32位系統中都是4個位元組

c:函式指標就是乙個普通的指標變數。

變數的型別是乙個函式指標變數型別。

它的值是某個函式的位址。

d:函式的實質是一段連續分布的**,所以函式的第一句**就是函式的位址。

e:c語言本身是強型別語言,編譯器會進行嚴格的型別檢查。

(每乙個變數都有自己變數型別)

f :函式名與陣列名有所不同。

最大區別是:

函式名做右值,加不加&意義相同。

陣列名則不同。

void (*pfunc)(void);

//pfunc = func1;

//左邊是乙個函式指標變數,右邊是乙個函式名

pfunc = &func1;

// &func1和func1做右值時是一模一樣的,沒任何區別

pfunc ();

//用函式指標來解引用以呼叫該函式

int *p;

int a[5];

p = a;

//般配的,型別匹配的,所以編譯器不會警告不會報錯。

//p = &a;

//型別不匹配,p是int *, &a是int (*)[5];(指標陣列)

int (*p1)[5] ;

p1 = &a;

// p1型別是int (*)[5],&a的型別也是int (*)[5] g:

假設我們有個函式是 :void func (void);

char *strcpy(char *dest, const char *src);

對應的函式指標

:void (*p) (void);char *(*pfunc)(char *dest, const char *src);

型別是:void (*) (void);

2:函式指標簡單應用例子

#include

int add(int a, int b);

int sub(int a, int b);

int multiply(int a, int b);

int divide(int a, int b);

// 定義了乙個型別pfunc,這個函式指標型別指向一種特定引數列表和返回值的函式

typedef int (*pfunc)(int, int);

int main(void)

while (c == '\n');

switch (c)

result = p1(a, b);

printf("%d %c %d = %d.\n", a, c, b, result);

return 0;

}int add(int a, int b)

int sub(int a, int b)

int multiply(int a, int b)

int divide(int a, int b)

c 指標簡述

1.在程式中定義了乙個變數,在對程式進行編譯時,系統就會給這個變數分配記憶體單元。編譯系統根據程式中定義的變數型別,分配一定長度的空間。一般整形變數分配4個位元組,字元型變數分配1個位元組。記憶體區的每乙個位元組有乙個編號,即 位址 2.由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。...

簡述 C 指標

看乙個一級指標例子 include int main 執行結果 foo.5 foo.0x7ffec682940c 取位址操作 foo p.0x7ffec682940c foo p 存 的值是foo的位址 foo p.0x7ffec6829410 取位址操作 foo p.5 引用操作符 foo p 獲...

C語言指標簡述

在c語言中,指標型別一般以資料類 型 變數 名 color 資料型別 變 量名的格式出現,如 int p 其實這並不有助於理解,而在c 中,指標型別允許如下寫法 int p 因此,我個人認為可以借助c 的格式來理解,指標從圖示上理解為指向某某某變數的指標,實際可以把指標當成一種新的變數型別,稱為指標...