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 的格式來理解,指標從圖示上理解為指向某某某變數的指標,實際可以把指標當成一種新的變數型別,稱為指標...