指標和陣列函式的關聯和各自的區別

2021-06-25 11:30:50 字數 3352 閱讀 3710

指標陣列和陣列指標:

指標陣列:array of pointers,即用於

儲存指標的陣列,也就是陣列元素都是指標

陣列指標:a pointer to an array,即

指向陣列的指標

還要注意的是他們用法的區別,下面舉例說明。

int* a[4]     指標陣列     

表示:陣列a中的元素都為int型指標    

元素表示:*a[i]   *(a[i])是一樣的,因為優先順序高於*

int (*a)[4]   陣列指標     

表示:指向陣列a的指標

元素表示:(*a)[i]  

元素表示:(*a)[i]  

注意:在實際應用中,對於指標陣列,我們經常這樣使用: ?

12

typedefint* pint;

pint a[4];

這跟上面指標陣列定義所表達的意思是一樣的,只不過採取了型別變換。

**演示如下: ?

12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#include

usingnamespacestd;

intmain()

;

int*a[4];//指標陣列

int(*b)[4];//陣列指標

b=&c;

//將陣列c中元素賦給陣列a

for(inti=0;i<4;i++)

//輸出看下結果

cout<<*a[1]}

注意:定義了陣列指標,該指標指向這個陣列的首位址,必須給指標指定乙個位址,容易犯的錯得就是,不給b位址,直接用(*b)[i]=c[i]給陣列b中元素賦值,這時陣列指標不知道指向**,除錯時可能沒錯,但執行時肯定出現問題,使用指標時要注意這個問題。但為什麼a就不用給他位址呢,a的元素是指標,實際上for迴圈內已經給陣列a中元素指定位址了。但若在for迴圈內寫*a[i]=c[i],那就意味著把乙個數字給了乙個指標,即把乙個數字給了位址..這同樣會出問題。總之一句話,定義了指標一定要知道指標指向**,不然要悲劇。

指標函式和函式指標:

指標函式與函式指標的區別 一、

1、指標函式是指帶指標的函式,即本質是乙個函式。函式返回型別是某一型別的指標

型別識別符號    *函式名(參數列)

int *f(x

,y);

首先它是乙個函式,只不過這個函式的返回值是乙個位址值。函式返回值必須用同型別的指標變數來接受,也就是說,指標函式一定有函式返回值,而且,在主調函式中,函式返回值必須賦給同型別的指標變數。

表示:float *fun();

float *p;

p = fun(a);

注意指標函式與函式指標表示方法的不同,千萬不要混淆。最簡單的辨別方式就是看函式名前面的指標*號有沒有被括號()包含,如果被包含就是函式指標,反之則是指標函式。

來講詳細一些吧!請看下面

指標函式:

當乙個函式宣告其返回值為乙個指標時,實際上就是返回乙個位址給呼叫函式,以用於需要指標或位址的表示式中。

格式:型別說明符 * 函式名(引數

)當然了,由於返回的是乙個位址,所以型別說明符一般都是int。

例如:int *getdate();

int * aaa(int,int);

函式返回的是乙個位址值,經常使用在返回陣列的某一元素位址上。

int * getdate(int wk,int dy);

main()

while(wk<1||wk>5||dy<1||dy>7);

printf(%d\n,*getdate(wk,dy));

}int * getdate(int wk,int dy),,

,,};return &calendar[wk-1][dy-1];

}程式應該是很好理解的,子函式返回的是陣列某元素的位址。輸出的是這個位址裡的值。

2、函式指標是指向函式的指標變數,即本質是乙個指標變數。

int (*f) (int x); /*

宣告乙個函式指標 */

f=func; /*

將func函式的首位址賦給指標f */

型別說明符 (*函式名)(引數

)其實這裡不能稱為函式名,應該叫做指標的變數名。這個特殊的指標指向乙個返回整型值的函式。指標的宣告筆削和它指向函式的宣告保持一致。

指標名和指標運算子外面的括號改變了預設的運算子優先順序。如果沒有圓括號,就變成了乙個返回整型指標的函式的原型宣告。

例如:void (*fptr)();

fptr=&function;

fptr=function;

取位址運算子&不是必需的,因為單單乙個函式識別符號就標號表示了它的位址,如果是函式呼叫,還必須包含乙個圓括號括起來的參數列。

可以採用如下兩種方式來通過指標呼叫函式:

x=(*fptr)();

x=fptr();

第二種格式看上去和函式呼叫無異。但是有些程式設計師傾向於使用第一種格式,因為它明確指出是通過指標而非函式名來呼叫函式的。下面舉乙個例子:

void (*funcp)();

void filefunc(),editfunc();

main()

void filefunc()

void editfunc()

程式輸出為:

filefunc

editfunc

總結:指標陣列*p,是數字,指標函式*fun(x,y),是函式

陣列指標(*p),是指標,函式指標(*fun)(x,y)是指標

指標函式和函式指標 指標陣列和陣列指標

綜述 函式指標是乙個指向函式的指標,而指標函式是指乙個返回值為指標的函式 陣列指標是乙個指向二維陣列的指標變數,而指標陣列是多個指標變數以陣列的形式儲存在記憶體中 一 函式指標 1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的優先順序高於 所以指標變數名外的括...

指標陣列和陣列指標 和 指標和陣列的定義與宣告

舉個栗子來區分以下指標陣列和陣列指標 int arr1 10 是指標陣列,arr1和 的結合性更高一些,所以arr1先與 結合成為陣列,陣列有10個元素,每個元素的型別都為int 型,所以 int arr1 10 是存放整型指標的陣列。int p 10 是陣列指標,p先與 結合,說明p是乙個指標變數...

深入理解指標和陣列 指標和函式

指向函式指標陣列的指標 在了解了指標之後,可以得出,指標就是乙個變數,用來存放位址的變數。位址就相當於門牌號,而指標就是存放它的變數,對指標進行解引用 則相當於拿一把鑰匙去開對應的門牌號的門,開啟門,訪問其中的變數。指標的大小在32位平台上是4個位元組,在64位平台上是8個位元組。如有以下 先看下面...