指针数组与数组指针
数组中每个元素都具有相同的数据类型,数组元素的类型就是数组的基类型。
如果一个数组中的每个元素均为指针类型,即由指针变量构成的数组,这种数组成为指针数组,它是指针的集合。
指针数组的的形式为:
类型* 数组名[常量表达式]
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();
}
浙公网安备 33010602011771号