函式指標 指標函式 函式指標的typedef

2021-08-17 16:43:33 字數 2044 閱讀 5463

一直對c 的知識都是懵懵的,總是用著用著 開始覺的疑惑,然後就找找資料,現在就記錄一下 函式指正 和 指標函式 的區別。

順便記一下 : 現在耳機裡的**是 river flows in you ---yiruma

函式指標:本質是 指標變數  其指向的是函式

宣告: 函式返回值型別 (*指標變數名)(函式引數)  -------int (*func)(int,int)

使用:func =&test  假設有個函式 int test( int ,int )

實際上 func ==* fcun 在下面的程式中可以看到 它們列印的值相同

printf("cpp_func = %p\n", cpp_func);

printf("*cpp_func = %p\n", *cpp_func);

區別 是 func 可以是左值 本質還是乙個變數可以在 賦值符左邊 但是*func實際上 就是乙個位址值 不能作為左值

cpp_func = (int (*)(int,int))dlsym(libcpptest, "_z4summii"); 是正確的

*cpp_func = (int (*)(int,int))dlsym(libcpptest, "_z4summii"); 是錯誤的

知乎上有見到:

對於函式名:  &函式名=*函式名=函式名

對於函式指標: *函式指標=函式指標 != &函式指標

這樣說 也沒錯 但是使用時還是要 區別一下

指標函式:本質是乙個函式 其返回值是乙個某種型別的指標

宣告 :指標型別名 *函式名 (函式引數)    或者這樣要更專業些 *****==  型別識別符號 *函式名 (函式引數)

使用:通常返回乙個位址 如:常用於返回陣列的某個元素的位址 或 值 (可以是多維陣列)

#includeint *f(int *b)

int main(int argc,char** argv)

;    p=f(a);

printf("%p\n",p); //指標

printf("%d\n",*f(a)); //指標指向的值

printf("%d\n",*p); //指標指向的值

return 0;

}//執行的結果

0xbfb09d9c

22

typedef:生成乙個新的型別

-----用於自定的型別 系統的型別int 什麼的就不用了哈

#include #includeint main(int argc, char **argv)

/*1.

ct@ubuntu:~/desktop$ ./a.out

cpp_func = 0xb773952b

cpp_func output = 20

typedef int (*fun)(int,int) fun 新的型別 ---不再是變數 fun 為指標函式的型別

此時fun 可以宣告 變數

fun func1

func1 *****int (*fun)(int,int)

2.ct@ubuntu:~/desktop$ ./a.out

cpp_func = 0xb7759000

cpp_func output = 20

而 fun *cpp_func; cpp_func這是乙個二級指標 ,cpp_func指向的乙個指標函式變數

*cpp_func = (int (*)(int,int))dlsym(libcpptest, "_z4summii"); *cpp_func 指標函式變數

為什麼呼叫函式的時候 :

printf("cpp_func output = %d\n", (*cpp_func)(10,10));都是用這一條語句 不會出錯呢?

應該就是這個原因叭:*函式指標=函式指標

此時的(*cpp_func)(10,10)就是函式指標

*/

函式指標 指標函式 指標的指標 指標陣列

一 函式指標 首先它是乙個指標,只是這個指標指向的是乙個函式。指標變數可以指向變數的位址 陣列 字串 動態分配位址,同時也可指向乙個函式,每個函式在編譯的時候,系統會分配給該函式乙個入口位址,函式名表示這個入口位址,那麼指向函式的指標變數稱為函式指標變數。表示 struct file operati...

函式指標,函式指標陣列,函式指標陣列的指標

函式指標的使用 先看如下例子 include include char fun char p1,char p2 else int main 我們使用指標的時候,需要通過鑰匙 來取其指向的記憶體裡面的值,函式指標使 用也如此。通過用 pf 取出存在這個位址上的函式,然後呼叫它。這裡需要注意到是,在 v...

指標函式,函式指標,指標的指標 詳解

1 指標函式是指帶指標的函式,即本質是乙個函式。函式返回型別是某一型別的指標 型別識別符號 函式名 參數列 int f x y 首先它是乙個函式,只不過這個函式的返回值是乙個位址值。函式返回值必須用同型別的指標變數來接受,也就是說,指標函式一定有函式返回值,而且,在主調函式中,函式返回值必須賦給同型...