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...