一 指針和一維數組的關係
- 指向數組的指針變量稱爲數組指針變量
- 數組名是數組首個元素的地址。 數組名可以看作是一個指針常量,不可修 改。
- 其值爲首個元素的地址值。如下用指針變量訪問數組元素
int a[]={12,22,32,42,52,62,72,82,92,102};
int *pa=a;
//指針變量p指向數組a的首地址 。pa等價於a
- 用指針變量對數組元素的訪問可以採用下標形式和指針形式兩種
下標形式:p[i]
指針形式:*(p+i)
舉例
for(int i=0;i<5;i++)
{
//使用數組方式
cout << p1[i] << " ";
cout << b[i] << " ";
//使用指針運算符
cout << *(p1+i) << " ";
cout << *(b +1) << " ";
}
二 指針和多維數組關係
- C++允許把一個二維數組分解爲多個一維數組來處理。數組名是首個元素 (一維數組)的地址。如下所示定義一個二維數組a
int a[3][4]=
{
{11,12,13,14},
{21,32,23,24},
{31,32,33,34},
}
二維數組a可以分解爲一維數組a[0],a[1],a[2]。如下圖所示
數組指針
- 數據類型爲數組的指針,稱爲數組指針。用於存放數組地址的指針
- 二維數組指針變量的定義:
數據類型名 (*指針變量名)[維數1];
- n維數組指針變量的定義:數據類型名 (*指針變量名)[維數n-1]…[維數1];
- 注意:“(*指針變量名)”兩邊的括號不可少,如缺少括號則表示是指針數 組。
定義:
int (*p)[4];
表示一個指向二維數組的指針變量,該二維數組的列數爲4
int (*p)[4]=a;
p是一個指針變量,指向二維數組a。其值等於a
、a[0]
、或&a[0][0]
取值
*(ptr+i)
:表示第i個一維數組 首個元素的地址(類型降級 int[] * —int *)
*(ptr+i)+j
:表示第i個一維數組 的第j個元元素的地址
*(*(ptr+i)+j)
:表示二維數組名[i][j]
int a[3][4] = { {11,12,13,14}, {21,32,23,24}, {31,32,33,34}, };
int(*ptr)[4] = a;//ptr 和 a,等效
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
//cout << ptr[i][j]<<" ";
cout << *(*(ptr + i) + j) << " ";
//cout << a[i][j] << " ";
//cout << *(*(a + i) + j) << " ";
}
cout << endl;
}
指針給數組賦值
int a[3][4];
int *pi = a[0];
for (int i = 0; i < 3; i++, pi += 4)
{
for (int j = 0; j < 4; j++)
{
pi[j] = i * j;
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("pi[%d][%d]=%d\n", i, j, a[i][j]);
}
}
指針數組
數據元素均爲指針類型的數組,稱爲指針數組。定義如下
類型名* 數組名[長度] = {0};
int *p[4];
表示p是一個指針數組,4個下標變量p[0]、p[1]、p[2]、p[3]均爲指針變 量。