C指標之函式指標與typedef

2021-10-07 05:29:56 字數 1476 閱讀 2476

函式指標、陣列指標、普通指標之間並沒有本質區別,區別在於指標指向的東西是個什麼玩意。

函式的實質是一段**,這一段**在記憶體中是連續分布的(乙個函式的大括號括起來的所有語句將來編譯出來生成的可執行程式是連續的)

結合函式的實質,函式指標其實就是乙個普通變數,這個普通變數的型別是函式指標變數型別,它的值就是某個函式的位址(也就是它的函式名這個符號在編譯器中對應的值)

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]

void func1(void)

void (*pfunc)(void);

//pfunc = func1; // 左邊是乙個函式指標變數,右邊是乙個函式名

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

pfunc(); // 用函式指標來解引用以呼叫該函式

寫乙個複雜的函式指標的例項:

char a[5] = ;

char* (*pfunc)(char *, const char *);

pfunc = strcpy;

pfunc(a, "abc");

printf("a = %s.\n", a);

陣列指標、指標陣列、函式指標等都屬於使用者自定義型別。

有時候自定義型別太長了,用起來不方便,所以用typedef給它重新命名乙個短點的名字。

注意:

// 這句重新命名了一種型別,這個新型別名字叫ptype,型別是:char* (*)(char *, const char *);

typedef char* (*ptype)(char *, const char *);

// 函式指標陣列

typedef char* (*ptype[5])(char *, const char *);

// 函式指標陣列指標

typedef char* (*(*ptype)[5])(char *, const char *);

ptype p3; // 等效於 char* (*p3)(char *, const char *);

ptype p4;

C 函式指標與指標函式

函式指標 函式名本身代表著函式的位址,因此給函數指標賦值使可以不用加 符號 加也可以!void func int 定義乙個函式 void pf int 定義乙個函式指標 pf func 給函式指標賦值 int f x,y 其中x,y是形式引數,f是函式名,呼叫後返回乙個指向整型資料的位址指標。f x...

C 函式指標與指標函式

c 要是不常用,相信過四天你的指標函式與函式指標的概念就該忘個精光。其實只要記住誰在後面誰就是哪個本質。先了解下指標陣列與陣列指標吧 陣列指標 就是指向陣列的指標,它表示的是乙個指標,它指向的是乙個陣列,它的重點是指標,如,int pa 8 宣告了乙個指標,該指標指向了乙個有8個int型元素的陣列 ...

C 指標函式與函式指標

指標預熱知識 1 指標就是位址 2 指標的型別應該與變數型別匹配 例如 int a 2 指標pa是int 型別,所以只能存放int型別變數a的位址 絕對不能存放char double.等型別變數的位址 int pa a include stdafx.h include using namespace...