指標和陣列

2021-07-03 08:38:20 字數 2209 閱讀 3343

int i,*p,a = ;

p= a;

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

其實從程式上看陣列和指標沒有區別,陣列從記憶體上是獲取連續的記憶體區域進行資料存放,通過陣列名獲取了這塊記憶體位址,所以陣列名就是這塊記憶體的代表,被定義為這塊記憶體的首位址。陣列名是乙個位址,不可修改的常量,乙個位址常量。陣列名這個符號就是代表記憶體的首位址,本身就是這個位址。它是乙個右值,不能放在=左邊進行賦值,而指標是變數確實乙個左值。陣列作為形參,在編譯器當做指標來看,編譯器從效率上將不提倡傳入記憶體空間,但同時要操作一段記憶體空間,所以編譯器預設的將陣列名轉化為指標,只是轉化,傳入的是陣列位址而已。

在c語言中並不存在多維陣列,從本質上講是陣列的陣列,也就是陣列的巢狀,各維之間有鮮明的層次關係。上一維把下一維看做作下一級陣列,也就是陣列的巢狀。

首先儲存行號為0的n個元素,對於這n個元素按列號從小到大依次儲存:緊接著儲存行號為1的n個元素…最後儲存行號為m-1的n個元素。

經過上面的分析,我們用sizeof來強化對陣列的理解。

int a[5][8][9];

sizeof(a)//5*8*9*sizeof(int)

sizeof(a[0])//8*9*sizeof(int)

sizeof(a[1])//8*9*sizeof(int)

sizeof(a[0][3])//9*sizeof(int)

sizeof(a[2][2][4])//sizeof(int)

sizeof(&a[0])//sizeof(int)

從上面很容易得到a[0]是指向乙個二維陣列,通過a[0]可以獲取這個二維陣列記憶體值,當然用sizeof,就是獲取乙個二維陣列的記憶體大小。&a[0]這是像獲取指向二維陣列指標的大小,也就是二維陣列開始的記憶體位址。在陣列中&a和&a[0],&a[0][0]是一樣的,這就是都是記憶體開始的位址值。但是一定注意&a與&a[0]作為右值賦值是,是不一樣的分別賦值給**指標和二級指標

指標陣列:array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標

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

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

int* a[4] 指標陣列

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

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

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

表示:指向陣列a的指標

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

其中()是不能去掉的,因為優先順序比*高,這樣就變成指標陣列了

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

#include 

using

namespace

std;

int main()

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

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

b=&c;//陣列指標指向陣列的位址,用陣列的位址進行初始化

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

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

//輸出看下結果,兩者的輸出方式不同

cout

<

cout

<

return

0;}

陣列和指標的區別定義乙個陣列的時候,需要在棧中靜態分配一塊記憶體,那麼需要知道記憶體的大小,因為定義陣列的時候需要確定各維的上限。陣列是乙個可以擁有記憶體,儲存變數的陣列型別,陣列名代表位址。指標是乙個儲存記憶體位址的資料型別,定義乙個指標需要知道它指向物件的型別,不需知道物件的大小。

字串常量

字串常量在c語言就是乙個字元陣列,儘管外部表現和陣列不一樣,實際上字串常量本身就是陣列的首位址,並且具有陣列型別。sizeof(「abdaaff」)是 7而不是4。重點區別是字串常量放在靜態儲存區,不允許改變;陣列在棧中靜態分配。

運算子&和*

&是取位址符,*是間接運算子。

&a的結果是乙個指標,指標指向的型別就是a的型別加上。在運算中加上就是獲取了指標指向的記憶體值。

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...

指標陣列和陣列指標

理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...

指標陣列和陣列指標

該文時自己對指標陣列用法的一點總結,還望高手指點不足原文如下 由於以前對指標陣列不太明白,所以自己寫了 乙個小的測試程式來驗證了自己的猜測,先總結如下 指標陣列,由名字就可以知道的該陣列中的成員都是為指標的。其定義的方法為 char p 5 該初定義乙個包含5個char 型別的陣列的指標,由於p本身...