指针数组/数组指针
C/C++中有兩個非常容易混淆的十分常用的但是又特別不引起人注意的兩個概念,指針數組和數組指針,或許你已經對這兩個概念早有耳聞,但是不知你有沒有對他們做過細致的分析來區別二者呢?
? ? 下面我們來看下百度百科上是如何對二者進行定義的
? ? 數組指針
一:數組指針:數組名本身就是一個指針,指向數組的首地址。注意這是聲明定長數組時,其數組名指向的數組首地址是常量。而聲明數組并使某個指針指向其值指向某個數組的地址(不一定是首地址),指針取值可以改變。
二:數組指針:是指向數組的一個指針,如int (*p)[10] 表示一個指向10個int元素的數組的一個針。 ??
? ?
? ? 指針數組
? ? 一個數組,若其元素均為指針類型數據,稱為指針數組。 也就是說,指針數組中每一個元素都相當于一個指針變量。其詳細形式應該如下: *a[0], ...*a[n]. 每一個數組里面存儲的是其指向的地址;一維指針數組的定義形式為:類型名 *數組名[數組長度]
例如:int *p[4],由于[]比*優先級更高,因此p先與[4]結合,形成p[4]的形式,這顯然是數組形式。然后再與p前面的*結合,*表示此數組是指針類型的,每個數組元素都指向一個整型變量。
?
? ? demo:
? ? 從上面的對比分析中我們可以清楚的知道二者的區別,關鍵就在于*和[]優先級上的問題,下面通過一個例子來分析一下。
?
聲明 char *ponitArray[] = {"stately" , "plump" , "buck" , "mulligan"}; 由定義知這是一個指針數組,那么sizeof(pointArray)=?呢,因為pointArray是一個存放指針的數組,而存放指針其實存放的是地址,一般用4個字節表示,而數組大小為4,故而結果就為4*4 = 16.
?
char (*arrayPoint)[4]; char t[4]="123"; arrayPoint=&t; cout<<"*A = "<<*arrayPoint<<"\tA = "<<arrayPoint<<endl;
上面幾行代碼輸出結果應該是什么呢?,首先arrayPoint是一個指針,指向一個存放4個字符的C風格字符串,從這里我們可以知道arrayPoint其實是一個32位(一般)的整數,所有下一步我們要將一個長度為4的字符串地址賦給該指針,即arrayPoint=&t;,故可知輸出結果就為“123”和字符串t的地址。
? ? 下面我們來看下百度百科上是如何對二者進行定義的
? ? 數組指針
一:數組指針:數組名本身就是一個指針,指向數組的首地址。注意這是聲明定長數組時,其數組名指向的數組首地址是常量。而聲明數組并使某個指針指向其值指向某個數組的地址(不一定是首地址),指針取值可以改變。
二:數組指針:是指向數組的一個指針,如int (*p)[10] 表示一個指向10個int元素的數組的一個針。 ??
? ?
? ? 指針數組
? ? 一個數組,若其元素均為指針類型數據,稱為指針數組。 也就是說,指針數組中每一個元素都相當于一個指針變量。其詳細形式應該如下: *a[0], ...*a[n]. 每一個數組里面存儲的是其指向的地址;一維指針數組的定義形式為:類型名 *數組名[數組長度]
例如:int *p[4],由于[]比*優先級更高,因此p先與[4]結合,形成p[4]的形式,這顯然是數組形式。然后再與p前面的*結合,*表示此數組是指針類型的,每個數組元素都指向一個整型變量。
?
? ? demo:
? ? 從上面的對比分析中我們可以清楚的知道二者的區別,關鍵就在于*和[]優先級上的問題,下面通過一個例子來分析一下。
?
聲明 char *ponitArray[] = {"stately" , "plump" , "buck" , "mulligan"}; 由定義知這是一個指針數組,那么sizeof(pointArray)=?呢,因為pointArray是一個存放指針的數組,而存放指針其實存放的是地址,一般用4個字節表示,而數組大小為4,故而結果就為4*4 = 16.
?
char (*arrayPoint)[4]; char t[4]="123"; arrayPoint=&t; cout<<"*A = "<<*arrayPoint<<"\tA = "<<arrayPoint<<endl;
上面幾行代碼輸出結果應該是什么呢?,首先arrayPoint是一個指針,指向一個存放4個字符的C風格字符串,從這里我們可以知道arrayPoint其實是一個32位(一般)的整數,所有下一步我們要將一個長度為4的字符串地址賦給該指針,即arrayPoint=&t;,故可知輸出結果就為“123”和字符串t的地址。
總結
- 上一篇: Android安卓备忘录(笔记)大作业简
- 下一篇: 求解一元三次方程近似解的几种算法(C语言