void PointerTest()
{
cout << "指针数组测试:" << endl;
//理解的关键:[] 优先级 高于 *
//1.指针数组:数组元素为指针
// 一个5元素的数组,元素类型 int*
int* p1[5];
int** p11 = p1;
//初始化
for (int i = 0; i < 5; i++) {
p1[i] = new int(i);
}
//遍历输出
for (int i = 0; i < 5; i++) {
cout << *p11[i] << " ";
//或 cout << *(p1 + i) << " ";
}
//销毁数组内指针元素。(注:指针数组变量由系统销毁,不做处理)
for (int i = 0; i < 5; i++) {
delete p1[i];
}
cout << endl;
cout << "数组指针测试:" << endl;
//2.数组指针:指向数组的指针,二维数组的行指针
// 一个指向5元素数组的指针,指针类型 int*, 元素类型 int
int (*p2)[5]; //或可看成:int[5] * p2
int a[6][5]; //数组元素个数与数组指针定义的数组元素数相同
p2 = a;
//初始化
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 5; j++) {
*(p2[i] + j) = i;
//p2[i][j] = i;
}
}
//遍历输出:指针操作
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 5; j++)
cout << *(p2[i] + j) << " ";
cout << endl;
}
cout << endl;
//遍历输出:数组操作
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 5; j++)
cout << a[i][j] << " ";
cout << endl;
}
cout << endl;
cout << "对象数组测试:" << endl;
//定义对象类 Obj
class Obj {
public:
int a;
};
//3.对象数组(指针数组)
int n = 5;
Obj** obj = new Obj*[n]; // Obj 的指针数组
//初始化
for (int i = 0; i < n; i++)
{
obj[i] = new Obj();
obj[i]->a = i;
}
//遍历输出
for (int i = 0; i < n; i++)
{
cout << obj[i]->a << " ";
}
//销毁数组内对象元素,指针数组内存
for (int i = 0; i < n; i++) {
delete obj[i];
}
delete[] obj;
cout << endl;
}
参考博文:
https://www.cnblogs.com/jianfeijiang/p/5914398.html