一、指针数组的定义和基本使用
指针数组是指一个数组,其中的每个元素都是指针类型。指针可以指向各种数据类型,包括基本数据类型和自定义类数据类型。指针数组在C++程序中广泛应用于存储和访问多个变量。
下面我们来看一个简单的例子:定义一个整型指针数组,并将其初始化:
#include <iostream>
using namespace std;
int main() {
int* ptr[3];
int a = 1, b = 2, c = 3;
ptr[0] = &a;
ptr[1] = &b;
ptr[2] = &c;
cout << *ptr[0] << endl;
cout << *ptr[1] << endl;
cout << *ptr[2] << endl;
return 0;
}
运行结果:
1
2
3
在这个例子中,我们先定义了一个指针数组ptr,它包含三个元素,每个元素都是一个指向整型变量的指针。然后我们定义三个整型变量a、b、c,并将它们的地址存储在ptr的对应元素中。最后,我们通过访问指针数组ptr中元素的方式输出了变量a、b、c的值。
二、指针数组在函数参数中的应用
指针数组广泛应用于函数参数的传递,可以方便地进行多个参数的传递和修改。
下面我们以一个例子说明指针数组在函数参数中的应用:
#include <iostream>
using namespace std;
void swap(int* arr[]) {
int* temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
int main() {
int a = 1, b = 2;
int* arr[2] = {&a, &b};
cout << "Before swap: a=" << *arr[0] << ", b=" << *arr[1] << endl;
swap(arr);
cout << "After swap: a=" << *arr[0] << ", b=" << *arr[1] << endl;
return 0;
}
运行结果:
Before swap: a=1, b=2
After swap: a=2, b=1
在这个例子中,我们定义了一个swap函数,它的参数是一个整型指针数组。函数内部我们用temp变量存储arr[0]指向的值,然后将arr[1]指向的值赋值给arr[0],最后将temp的值赋值给arr[1],完成了a、b变量值的交换。
三、指针数组的动态内存分配
指针数组也可以进行动态内存分配,这样就可以在程序运行时根据需要调整内存的大小。
下面我们以一个动态添加元素的例子说明指针数组的动态内存分配:
#include <iostream>
using namespace std;
int main() {
int size = 3;
int** arr = new int*[size];
for (int i = 0; i < size; i++)
arr[i] = new int[i+1];
for (int i = 0; i < size; i++) {
for (int j = 0; j <= i; j++)
arr[i][j] = j+1;
for (int j = 0; j <= i; j++)
cout << arr[i][j] << " ";
cout << endl;
}
for (int i = 0; i < size; i++)
delete [] arr[i];
delete [] arr;
return 0;
}
运行结果:
1
1 2
1 2 3
在这个例子中,我们首先使用new关键字动态分配了一个指针数组arr,并指定其大小为3。然后我们使用for循环为指针数组的每个元素动态分配内存,并将其初始化为1至i+1的自然数序列。最后,我们通过嵌套的for循环遍历指针数组,输出结果。
注意,我们在程序结束时还需要用delete关键字释放指针数组所占用的内存,否则会造成内存泄漏。