11 26C語言 指標函式 指向指標的指標

2021-06-19 09:47:40 字數 2666 閱讀 2682

今天學習到的了c語言中-----指標形函式,下面就說一下它的具體內容吧~~ 一:

在前面我一學習過了所謂函式型別是指函式返回值的型別。那麼在c語言中允許乙個函式的返回值是乙個指標(即位址),這種返回指標值的函式稱為指標型函式。

下面是它的形式:

型別說明符 *函式名(形參表)    

其中函式名之前加了「*」號表明這是乙個指標型函式,即返回值是乙個指標。型別說明符表示了返回的指標值所指向的資料型別。 如:

int *ap(int x,int y)

表示ap是乙個返回指標值的指標型函式,它返回的指標指向乙個整型變數。

說到這裡我想用乙個例子來體現以下吧,回饋!

題:通過指標函式,輸入乙個1~7之間的整數,輸出對應的星期名。

我自己說一下這個程式吧~有漏的地方請大家見諒,並指教一下小弟

首先定義了乙個指標型函式day_name,它的返回值指向乙個字串。定義了乙個靜態指標陣列name,name陣列初始化賦值為八個字串,分別表示各個星期名及出錯提示。形參n表示與星期名所對應的整數。然後呢輸入的整數i作為實參,在printf語句中呼叫day_name函式並把i值傳送給形參n。day_name函式中的return語句包含乙個條件表示式,n值若大於7或小於1則把name[0]指標返回主函式輸出出錯提示字串「illegal day」。否則返回主函式輸出對應的星期名。主函式中有個條件語句,作用是當輸入的i<0(負數)時,程式結束!而exit是乙個庫函式,exit(1)表示發生錯誤後退出程式,exit(0)表示正常退出。其實很簡單了,好了接著說下面的吧~~~哦,對了還有一點很重要的是:

int (*p)()是乙個變數說明,說明p是乙個指向函式入口的指標變數,該函式的返回值是整型量,(*p)的兩邊的括號不能少。

int*p()則不是變數說明而是函式說明,說明p是乙個指標型函式,其返回值是乙個指向整型量的指標,*p兩邊沒有括號。

二:指標陣列和指向指標的指標

1.指標陣列的概念:

乙個陣列的元素值為指標則是指標陣列。 指標陣列是一組有序的指標的集合。 指標陣列的所有元素都必須是具有相同儲存型別和指向相同資料型別的指標變數。

2.指標陣列說明的形式為:

型別說明符 *陣列名[陣列長度]

其中型別說明符為指標值所指向的變數的型別。

例如:int *pa[3]

表示pa是乙個指標陣列,它有三個陣列元素,每個元素值都是乙個指標,指向整型變數。

為了加深理解,同樣練習一下題並說明:

通常可用乙個指標陣列來指向乙個二維陣列。指標陣列中的每個元素被賦予二維陣列每一行的首位址,因此也可理解為指向乙個一維陣列。

說一下過程,其中pa是乙個指標陣列,三個元素分別指向二維陣列a的各行。然後用迴圈語句輸出指定的陣列元素。其中*a[i]表示i行0列元素值;*(*(a+i)+i)表示i行i列的元素值;*pa[i]表示i行0列元素值;由於p與a[0]相同,故p[i]表示0行i列的值;*(p+i)表示0行i列的值。讀者可仔細領會元素值的各種不同的表示方法。

3.指向指標的指標

概念是如果乙個指標變數存放的又是另乙個指標變數的位址,則稱這個指標變數為指向指標的指標變數。

在前面我已經學習過通過指標訪問變數稱為間接訪問。由於指標變數直接指向變數,所以稱為「單級間址」。而如果通過指向指標的指標變數來訪問變數則構成「二級間址」。

我們來看一下示意圖吧:

下來說的一點是怎樣定義乙個指向指標型資料的指標變數呢?如:

char **p;

p前面有兩個*號

,相當於

*(*p)

。顯然*p

是指標變數的定義形式,如果沒有最前面的

*,那就是定義了乙個指向字元資料的指標變數。現在它前面又有乙個

*號,表示指標變數

p是指向乙個字元指標型變數的。

*p就是

p所指向的另乙個指標變數。

為了加強理解我特意找了個圖:

我們可以看到,

name是乙個指標陣列,它的每乙個元素是乙個指標型資料,其值為位址。name是乙個陣列,它的每乙個元素都有相應的位址。陣列名name代表該指標陣列的首位址。name+1是mane[i]的位址。name+1就是指向指標型資料的指標(位址)。還可以設定乙個指標變數p,使它指向指標陣列元素。p就是指向指標型資料的指標變數。

另外一點如果有:

p=name+2;

printf(「%o\n」,*p);

printf(「%s\n」,*p);

則,第乙個printf函式語句輸出name[2]的值(它是乙個位址),第二個printf函式語句以字串形式(%s)輸出字串「great wall」。通過這些總結,我對這部分的內容又加深了理解,以後要吧基礎打得紮實了才是硬道理!!

好了今天就現總結到這裡吧!今天又更深刻的意識到基礎的重要性,好工作的機會是留給有準備並且基礎紮實的人的!!!

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 前者是返回值是指標的函式 後者是乙個指向函式的指標。...