ios中陣列和指標的區別,陣列和指標的區別

2021-03-15 12:30:00 字數 5423 閱讀 7528

1樓:育知同創教育

(1)陣列可以申請在棧區和資料區;指標可以指向任意型別的記憶體塊(2)sizeof作用於陣列時,得到的是陣列所佔的記憶體大小;作用於指標時,得到的都是4個位元組的大小

(3)陣列名表示陣列首位址,值不可以改變,如不可以將++作用於陣列名上;普通指標的值可以改變,如可將++作用於指標上

(4)用字串初始化字元陣列是將字串的內容拷貝到字元陣列中;用字串初始化字元指標是將字串的首位址賦給指標,也就是指標指向了該陣列

2樓:千鋒教育

從英文解釋或中文全稱看就比較容易理解。

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

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

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

int* a[4] 指標陣列

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

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

表示:指向陣列a的指標

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

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

typedef int* pint;

pint a[4];

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

**演示如下:

#include

using namespace std;

int main()

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

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

b=&c;

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

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

//輸出看下結果

cout<<*a[1]<

}注意:定義了陣列指標,該指標指向這個陣列的首位址,必須給指標指定乙個位址,容易犯的錯得就是,不給b位址,直接用(*b)[i]=c[i]給陣列b中元素賦值,這時陣列指標不知道指向**,除錯時可能沒錯,但執行時肯定出現問題,使用指標時要注意這個問題。但為什麼a就不用給他位址呢,a的元素是指標,實際上for迴圈內已經給陣列a中元素指定位址了。

但若在for迴圈內寫*a[i]=c[i],這同樣會出問題。

陣列和指標的區別?

3樓:育知同創教育

(1)陣列可以申請在棧區和資料區;指標可以指向任意型別的記憶體塊(2)sizeof作用於陣列時,得到的是陣列所佔的記憶體大小;作用於指標時,得到的都是4個位元組的大小

(3)陣列名表示陣列首位址,值不可以改變,如不可以將++作用於陣列名上;普通指標的值可以改變,如可將++作用於指標上

(4)用字串初始化字元陣列是將字串的內容拷貝到字元陣列中;用字串初始化字元指標是將字串的首位址賦給指標,也就是指標指向了該陣列

陣列指標和指標陣列的區別

4樓:匿名使用者

陣列指標(也稱行指標)

定義 int (*p)[n];

()優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。

如要將二維陣列賦給一指標,應這樣賦值:

int a[3][4];

int (*p)[4]; //該語句是定義乙個陣列指標,指向含4個元素的一維陣列。

p=a; //將該二維陣列的首位址賦給p,也就是a[0]或&a[0][0]

p++; //該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1]

所以陣列指標也稱指向一維陣列的指標,亦稱行指標。

指標陣列

定義 int *p[n];

優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p+1時,則p指向下乙個陣列元素,這

樣賦值是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指標變數可以用來存放變數地

址。但可以這樣 *p=a; 這裡*p表示指標陣列第乙個元素的值,a的首位址的值。

如要將二維陣列賦給一指標陣列:

int *p[3];

int a[3][4];

p++; //該語句表示p陣列指向下乙個陣列元素。注:此陣列每乙個元素都是乙個指標

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

p[i]=a[i]

這裡int *p[3] 表示乙個一維陣列內存放著三個指標變數,分別是p[0]、p[1]、p[2]

所以要分別賦值。

這樣兩者的區別就豁然開朗了,陣列指標只是乙個指標變數,似乎是c語言裡專門用來指向二維陣列的,它占有記憶體中乙個指標的儲存空間。指標陣列是多個指標變數,以陣列形式存在記憶體當中,占有多個指標的儲存空間。

還需要說明的一點就是,同時用來指向二維陣列時,其引用和用陣列名引用都是一樣的。

比如要表示陣列中i行j列乙個元素:

*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]

優先順序:()>>*

5樓:千鋒教育

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

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

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

int* a[4] 指標陣列

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

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

表示:指向陣列a的指標

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

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

typedef int* pint;

pint a[4];

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

**演示如下:

#include

using namespace std;

int main()

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

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

b=&c;

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

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

//輸出看下結果

cout<<*a[1]<

}注意:定義了陣列指標,該指標指向這個陣列的首位址,必須給指標指定乙個位址,容易犯的錯得就是,不給b位址,直接用(*b)[i]=c[i]給陣列b中元素賦值,這時陣列指標不知道指向**,除錯時可能沒錯,但執行時肯定出現問題,使用指標時要注意這個問題。但為什麼a就不用給他位址呢,a的元素是指標,實際上for迴圈內已經給陣列a中元素指定位址了。

但若在for迴圈內寫*a[i]=c[i],這同樣會出問題。總之一句話,定義了指標一定要知道指標指向**,不然要悲劇。

6樓:e時代幽默網

陣列指標,就是乙個指向陣列首元素的指標,或者說是指向乙個陣列起始記憶體位址的指標。

指標陣列,就是乙個陣列中的所有元素型別均為指標,也就是說是乙個專門用來存放一堆指標的陣列。

陣列指標和指標陣列的區別

7樓:育知同創教育

int a[3][4]這個bai無需多說,就du是乙個二zhi維陣列。

int (*p)[4]就相當於daoint p[4],它就是乙個二維陣列的指標,可以

專指向乙個第屬二維度為4的二維陣列。而a就是這樣的陣列,因而下面是合法的。

p=a;

int *p[3]是指標陣列。說白了,就是定義了三個指標,分別為p[0],p[1],p[2]。可以將他們單獨拿來使用。

int a1,a2,a3;

p[0]=&a1;

p[1]=&a2;

p[2]=&a3;

c語言中的指標陣列和陣列指標的區別

8樓:黑丶雨

指標陣列:陣列裡的每乙個元素都是指標如*p[10],裡面的 p[0] 到 p[9] 都是指標;

可參考:http://baike.

陣列指標:指向乙個陣列的指標,如 arr[10] 是乙個陣列, 讓乙個指標指向這個陣列 p = arr;

訪問時通過 *(p + n) 或 p[n] 訪問元素值,n為元素索引值;

可參考:http://baike.

9樓:育知同創教育

int (*p)[4]; // 定義乙個陣列指標,指向含4個元素的一維陣列,陣列元素是int型別。

int *p[4]; // 定義乙個指標陣列,陣列中每個元素是乙個指標,指標指向**就要根據程式來定了。

判斷陣列指標與指標陣列主要通過運算子的優先順序來判斷。

int (*p)[4]; // 由於( )的優先順序高,說明p是乙個指標,指向乙個一維陣列的指標

int *p[4]; // 由於[ ]的優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列

c 語言指標的指標和二維陣列的區別?

10樓:文帝寶寶

指標的指標和二維陣列完全倆東西,二維陣列是 一維陣列的一維陣列,元素是陣列,所以可以隱式轉化為int (*)[3],跟int **兩回事,擴充套件到更多維或其它型別也是成立的,只能隱式轉化為第一維的元素的指標

補充說明下隱式轉化為指標,簡單說就是這樣(t是任意型別)

設有乙個陣列t a[10];

a的型別是「t [10]」,在做大多數運算的時候,都先隱式轉化為「t *」型別,即t的指標

對於多維陣列,可以看做是乙個一維陣列,陣列的元素型別就是第二維開始的陣列型別,比如:

t a[10][20][30];

是乙個有10個型別為「t [20][30]」元素的陣列,用**解釋更清晰:

typedef t u[20][30];

u a[10];

跟上面的定義等價,所以a只能隱式轉化為「u *」,「u *」後也就是「t (*)[20][30]」這個型別了,跟多級指標沒關係,因此,多維陣列不存在到多級指標的轉化規則,強轉只會導致問題

陣列指標和指標陣列的區別,c語言中的指標陣列和陣列指標的區別

int a 3 4 這個bai無需多說,就du是乙個二zhi維陣列。int p 4 就相當於daoint p 4 它就是乙個二維陣列的指標,可以 專指向乙個第屬二維度為4的二維陣列。而a就是這樣的陣列,因而下面是合法的。p a int p 3 是指標陣列。說白了,就是定義了三個指標,分別為p 0 p...

c語言中的指標陣列和陣列指標的區別

指標陣列 陣列裡的每乙個元素都是指標如 p 10 裡面的 p 0 到 p 9 都是指標 可參考 http baike.陣列指標 指向乙個陣列的指標,如 arr 10 是乙個陣列,讓乙個指標指向這個陣列 p arr 訪問時通過 p n 或 p n 訪問元素值,n為元素索引值 可參考 http baik...

c語言 二維陣列指標中的和,C語言 二維陣列指標中的 和

要回答你的這個問題,不妨先根據你的問題先編寫一段小的示例程式 include include using namespace std int a 3 4 int main 這段示例程式在我本地上執行的結果為 a i 0 4214816 a i 4214816 a i 4214816 a i 0 42...