指针数组与数组指针

数组中每个元素都具有相同的数据类型,数组元素的类型就是数组的基类型。

如果一个数组中的每个元素均为指针类型,即由指针变量构成的数组,这种数组成为指针数组,它是指针的集合。

指针数组的的形式为:

类型* 数组名[常量表达式]
int *p[3]; //声明了一个数组,数组名为p,数组里面的元素为int*(存放int变量的地址)

数组指针的形式为:

类型 (*数组名)[常量表达式]
   int (*p)[4] ;  //p是一个指针,是一个指向数组的指针,也是二维数组的行指针(4代表的是二维数组的列)

        int (*p)[4]; // 定义了一个指针p,指向一个4个元素的数组。只是定义一个指针,指向4个元素的数组

        int *p[4];   //定义了一个数组指针p[4],p的每个元素指向一个整型的数据。就是数组里面保存的是指针

 

(1)int* p[2] 是一个指向int型的指针数组,即:p是包含两个元素的指针数组,指针指向的是int型。

可以这样来用:

#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列的数组,可以这样来用:

#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)其等价形式如下:

#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 @ 2013-03-15 17:11  执迷不悟~  阅读(269)  评论(0)    收藏  举报