转载自:http://www.cnblogs.com/staring-hxs/archive/2013/03/15/2961798.html
数组中每个元素都具有相同的数据类型,数组元素的类型就是数组的基类型。
如果一个数组中的每个元素均为指针类型,即由指针变量构成的数组,这种数组成为指针数组,它是指针的集合。
指针数组的的形式为:
1
|
类型* 数组名[常量表达式] |
1
|
int *p[3]; //声明了一个数组,数组名为p,数组里面的元素为int*(存放int变量的地址) |
数组指针的形式为:
1
2
|
类型 (*数组名)[常量表达式] int (*p)[4] ; //p是一个指针,是一个指向数组的指针,也是二维数组的行指针(4代表的是二维数组的列) |
int (*p)[4]; // 定义了一个指针p,指向一个4个元素的数组。只是定义一个指针,指向4个元素的数组
int *p[4]; //定义了一个数组指针p[4],p的每个元素指向一个整型的数据。就是数组里面保存的是指针
(1)int* p[2] 是一个指向int型的指针数组,即:p是包含两个元素的指针数组,指针指向的是int型。
可以这样来用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#include <iostream> using namespace std; void main() { int * p[2]; int a[3] = {1, 2, 3}; int b[4] = {4, 5, 6, 7}; p[0] = a; p[1] = b; int i; for ( i = 0; i < 3; i++) cout << *(*p + i) << " " ; cout << endl; for (i=0; i<3; i++) cout << *p[0] + i << " " ; cout << endl; for (i = 0; i < 4; i++) cout << *p[1] + i<< " " ; cout <<endl; for (i=0; i<4; i++) cout << *(p[1]+i) << " " ; getchar (); } |
(2)对于 int (*p)[2], 它相当于一个二维数组的用法,只是它是一个n行2列的数组,可以这样来用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include <iostream> using namespace std; void main() { int (*p)[2]; int b[3][2] = {{1, 2}, {3, 4}, {5, 6}}; p = b; for ( int i = 0; i < 3; i++) { for ( int j = 0; j < 2; j++) { cout << p[i][j] << " " ; //cout << *(*(p+i)+j) << " " ; } cout << endl; } getchar (); } |
注意:对于(1)为行数确定、列数不确定,即为2*n型的。(2)为n*2型的数组的指针用法,即行数不确定、列数确定。
对于(1)其等价形式如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include <iostream> using namespace std; void main() { int ** array; array = new int * [2]; int a[3] = {1, 2, 3}; int b[4] = {4, 5, 6, 7}; array[0] = a; //*array = a; array[1] = b; //*(array+1) = b; for ( int i = 0; i < 3; i++) cout << array[0][i]; //cout << *array[0] + i; cout<<endl; for ( int j = 0; j < 4;j++) cout << array[1][j]; // cout << *array[1] + j; getchar (); } |