C語言筆記總結(函式與指標)

2021-08-10 09:50:59 字數 2522 閱讀 1417

v

v指標函式

顧名思義,這是乙個

函式,函式的返回值是

指標(位址)。 ø

定義指標型函式的一般形式為:

型別說明符 *函式名

(形參表)

其中函式名之前加了「*

」號表明這是乙個指標型函式

,即返回值是乙個指標。型別說明符表示了返回的指標值所指向的資料型別。

v總結:int(*p)()和

int *p()區別

1.int (*p)()是乙個

變數說明

,說明p是乙個

指向函式入口

的指標變數,該函式的返回值是整型量,(*p)的兩邊的括號不能少。 2.

int *p()則

不是變數說明而是函式說明

,說明p是乙個指標型函式,其

返回值是乙個指向整型量的指標

,*p兩邊沒有括號。作為函式說明,在括號內最好寫入形式引數,這樣便於與變數說明區別。

ø知識點應用:

在c語言的面試題當中,喜歡對陣列、指標、函式都寫成乙個整體,以此來讓區分面試者學習

c語言的知識點掌握的如何。

下面來舉兩個例子:

1.從變數開始看  

2.從變數開始向右看 。

1.int *(*(*fp)(int))[10];

分析:從變數fp開始看,

fp是乙個指標;指標右邊是左括號,分析必然是函式。那麼

fp指標便指向這個函式,函式的形參是

int,

返回值是指標;而這個指標又指向乙個陣列,陣列裡面有

10個元素,每個元素都是

int *型。

2.int *(*(*array[5])())();

分析:array是乙個變數,向右看,是乙個方括號,可見這是乙個陣列。陣列裡面有

5個元素,每個元素都是指標型別;陣列裡面的指標指向乙個函式,函式的形參為空,返回值為指標型別;這個指標又指向乙個函式,函式的形參為空,返回值為

int *型。

ps:這裡面涉及到的陣列、指標、函式。分析起來:

(1)陣列主要分析陣列裡面有

幾個元素

,每個元素是什麼

資料型別

(2)函式

主要分析函式的

形參、返回值

(3)指標

主要分析

指向什麼

總結:各種形式的步長(針對二維陣列

a[4][4])

1.&a:陣列的首位址,步長為乙個陣列。故

&a+1

2.a:陣列的第

0行的位址,步長為一行。故

a+1為指向第一行的位址

3.a[0]:陣列第0行第

0列的位址,步長為乙個元素。故

a[0]+1為第0

行第乙個元素

注意:1.不要把

&a[i]

簡單的理解為

a[i]

的實體地址,因為並不存在

a[i]

這個變數。它只是一種位址的計算方法,能得到第

i行的位址。

2.&a[i]和

a[i]

的值是一樣的,但它的含義卻不同。

&a[i]

或a+i

指向行,而

a[i]

或*(a+i)

指向列。當下標

j=0時,

&a[i]

和a[i]+j

的值相等。

*(a+i)

只是a[i]

的另一種表示形式。在二維陣列中,

a+i=a[i]=*(a+i)=&a[i]=&a[i][0]

即它們的位址值是相等的。

知識應用:

下面是一道又關於二位陣列位址的面試題:

main()

,,};

int i;

int (*p)[4]=a,*q=a[0];

for(i=0;i<3;i++)

for(i=0;i<3;i++)

printf("%d,",a[i][i]);

printf("%d,%d\n",*((int *)p),*q);

}

求printf中的結果:

2 4 7  3,5

這段程式的關鍵**:

if(i==0)      

(*p)[i+i/2]=*q+1;

else

p++,++q;

分析:(*p)即指向第

0行的位址,(

*q)指向第

0列的位址

i = 0的時候,就是實現將原來第

0列的數加一賦值給第

0行位址裡面的資料;當i!

= 0的時候,

p++,

q++,就是實現將

p(原來指向第0行

)和q(原來指向第

0列的位址

)向後移動,根據條件,p和

q向後移動兩個位置,則p和

q就分別指向了5和

3.

c語言函式指標與指標函式

include include include using namespace std 1 c語言函式指標 解釋 這是一種很特殊的指標,它的指向是乙個函式的入口 作用 該指標可以接受乙個函式的位址,代表這個函式執行函式的操作 函式指標舉例 下面是乙個函式指標pfunc,它只能指向返回值為float,...

C語言函式指標與指標函式

在大家剛開始學習c語言的時候,總是分不清函式指標和指標函式,就算是知道了它們之間的區別,也不了解它們的使用場景,我寫此部落格幫大家縷一縷,也幫我自己縷一縷 1 函式指標與指標函式的概念以及區別 指標函式 從名字上可以看出,首先它是乙個函式,指標指的是返回值為指標 函式指標 從名字上可以看出,首先他是...

C語言 函式指標與指標函式

寫在前面的話 博主是乙個小菜鳥,並且非常玻璃心!如果文中有什麼問題,請友好地指出來,博主查證後會進行更正,啾咪 每篇文章都是博主現階段的理解,如果理解的更深入的話,博主會不定時更新文章。typedef用於為各種資料型別定義新名字。語法 typedef unsigned char byte 在這個型別...