指向函式的指標(續) C語言

2021-06-14 21:06:37 字數 2025 閱讀 2913

內容:前面寫過《指向函式的指標 - c語言》,本文將在陣列指標的基礎上對函式的指標**。

我們先來做個關於陣列的小實驗:

# include int main(void)

; printf("a = %d\n", a);

printf("&a = %d\n", &a);

printf("a + 1 = %d\n", a + 1);

printf("&a + 1 = %d\n", &a + 1);

printf("*(a + 1) = %d\n", *(a + 1));

printf("*(&a + 1) = %d\n", *(&a + 1));

return 0;

}

得到的結果意料之中,如下所示:

a = 2686744

&a = 2686744

a + 1 = 2686748

&a + 1 = 2686752

*(a + 1) = 4

*(&a + 1) = 2686752

由此分析,a表示的是陣列的第乙個元素的指標,&a表示的是陣列的指標,(a + 1)表示的是陣列的第二個元素的指標,(&a + 1)表示的沒有意義的值。

我們得到結論:對於陣列a[2],&a指的是指向陣列的指標,a指的是指向陣列第乙個元素的指標,在指標型別上是有區別的。

我們再做個關於函式指標的實驗:

# include void fun(void)

int main(void)

編譯過程中,會產生如下警告:

e:\c\play\function.cpp	in function 'int main()':

15 33 e:\c\play\function.cpp [warning] pointer to a function used in arithmetic [-wpointer-arith]

16 35 e:\c\play\function.cpp [warning] pointer to a function used in arithmetic [-wpointer-arith]

17 35 e:\c\play\function.cpp [warning] pointer to a function used in arithmetic [-wpointer-arith]

列印結果如下:

fun = 4199344

&fun = 4199344

*fun = 4199344

*&fun = 4199344

&*fun = 4199344

****fun = 4199344

fun + 1 = 4199345

*fun + 1 = 4199345

&fun + 1 = 4199345

sizeof(&fun) = 4

分析一下,發現&fun指的肯定是函式的指標,而對於fun和*fun則根據情況而定。產生的警告則說明,函式的指標與其他型別(如整型等)的指標不同,不能進行加減運算。

(只是通過**,感性分析,純屬個人見解)

實際上,函式名就代表了函式的位址,因此fun就是乙個位址。這個跟陣列非常類似,其名字就是指標常量,也即乙個位址。

對函式名取位址,即&fun產生指向函式的指標,也可以看做是函式的位址。 因此fun和&fun結果一致。

而 *fun代表指向函式的指標,指向的是函式的位址。所以可以得到*fun = fun。

即:*fun=*(fun) = *(&fun) = fun

在c語言中,函式本身不是變數,但可以定義指向函式的指標。這種型別的指標可以被賦值、存放在陣列中、傳遞給函式以及作為函式的返回值等等。

函式作為引數傳遞給函式時,因為它們是函式,前面不需要加取位址運算子&。同樣的原因,陣列名前面也不需要&運算子。

(全文完)

C語言 指向函式的指標

1 函式型別 函式指標變數 指向函式的入口位址 乙個函式是若干語句的集合 經編譯後儲存在函式 儲存區 並占有一片連續的儲存空間 對函式指標只能用函式名賦值而無其他運算 include stdio.h 23 intmax intx inty 45 intmain 617 18int max intx ...

C語言 指向函式的指標

在c語言中,函式名代表函式的入口位址。可以定義乙個指標變數,接收函式的入口位址,讓它指向函式,這就是指向函式的指標,也稱函式指標。通過函式指標可以呼叫函式,它還可以作為函式的引數。函式指標的定義 函式指標定義的一般格式為 型別名 變數名 引數型別表 型別名指定函式返回值的型別,變數名是指向函式的指標...

C語言指向函式的指標

定義形式 型別 指標變數名 引數列表 例如 int p int i,int j 在這裡 int是函式的返回型別,p是指向函式的指標,int i,int j 是函式的引數 注意 int f int i,int j int p int i,int j 前者是返回值是指標的函式 後者是乙個指向函式的指標。...