转载自: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();
}
posted on 2014-10-30 11:00  归海一刀  阅读(176)  评论(0)    收藏  举报