c c 中關於指標和陣列的理解與對接

2021-10-22 16:37:08 字數 1360 閱讀 3917

c/c++的學習中,指標的使用是乙個難點。本篇文章講講c/c++中的指標與陣列之間的對接

[ ]和本質都是在位址上取值。以二維陣列a[ ][ ]為例,有a=&a[ ] , a[ ] = &a[ ][ ], 則有 * a=星(&a)=a[ ]=&a[ ][ ],星星a=**(&a[ ])=星a[ ]=***(&a[ ][ ]) = a[ ][ ]。如果最終要取出儲存在位址上的值,最後一定是要等價於 a[ ][ ]才可以取出。

在多維int陣列裡,尤其注意位址上的運算。在不同維度,位址+1或-1所加的位址值是不一樣的。如對於二維度的陣列a[t1][t2],顯然&a[0][0]+1的位址是&a[0][0] + 4個位元組。但&a[0]+1就不一樣,它加的是一維的個數乘上4個位元組,即t2乘4個位元組。

指標的宣告方式有很多,常用的有:

int *p: p指標直接指向儲存值的位址。

int *p; 指標陣列,p[0]指標直接指向儲存值的位址。

int (*p): 指向陣列的指標,一般用於二維指標。p指標指向二維陣列的一維陣列位址,如p = a =&a[0]。

一定要同等維度的指標才可以對接:一維陣列a[ ]為例:int p = a; 則p指向a陣列首位址,可以通過p和p[ ]來訪問。以二維陣列a為例。int *p, p不能接受a或者&a[0],只能收a[0] 或&a[0][0]。int (*p) 的p指向的是該二維陣列中的一維,因此p只能指向該二維陣列的一維位址, 如p = a = &a[0], 或者p = &a[1]; p = &a[0][0]是不允許的

**如下,可以嘗試更改以加深理解

#include

using

namespace std;

void

test1()

;int

*p; p =

&a[0];

cout <<

*p << endl;

cout<<}void

test2()

;int

*p;int

*q[4];

int(

*t)[2]

; p =

&a[0][

0]; cout<<

*p

&a[0][

0]; cout <<

*q[0

]<< endl;

t =&a[0];

cout <<

**t << endl;

cout <<**

(t+1

)<< endl;

cout <<*(

*t+1

)<< endl;

}void

main()

關於指標和陣列的理解

要充分理解指標和陣列,首先要清楚它們的特性。指標是位址。陣列是一組有序資料的集合,陣列中的資料排列是有一定規律的。指標和陣列在本質上是不同的。下面將介紹指標陣列 陣列指標 函式指標 函式指標陣列 指向函式指標陣列的指標 1.指標陣列 指標陣列是陣列,是乙個存放指標的陣列。如 int arr 10 2...

指標陣列和陣列指標的理解與應用

指標陣列,即以指標為元素的陣列,其主要應用於選單的查詢 注意下面的例項 include intmenu int main if choice 0 choice 6 return0 int menu 效果圖 還有乙個就是關於表驅動的例項 include intadd int a,int b int m...

C C 深入理解指標和陣列的關係

int a int p 3 a 注意左值 對陣列名取位址,得到的指標為指向整個陣列的指標。形參為陣列時勿須帶陣列長度,因為計算機不會處理,如果需要傳陣列長度,需要另外加引數。1 include 23 void array add int a,int len 4void array add int p...