深入解析C++中的指针数组与指向指针的指针
指针数组
指针数组是指以数组形式存储的指针的集合。其语法格式为:
type* array_name[size];
type为指针所指向的类型,array_name为数组的名称,size为数组的大小。其中,*表示指针运算符。指针数组定义完成后,可以通过下标的方式对其进行操作。
以下是一个示例,展示如何定义和使用指针数组:
#include <iostream>
int main()
{
int a = 1, b = 2, c = 3;
int* arr[3] = {&a, &b, &c};
for (int i = 0; i < 3; i++)
{
std::cout << "arr[" << i << "] = " << *arr[i] << std::endl;
}
return 0;
}
在上述示例中,定义了一个包含3个指向int类型变量地址的指针数组,并将这三个指针分别指向a、b、c三个int类型的变量。最后,遍历指针数组,并输出数组中每个元素所指向的变量的值。
指向指针的指针
指向指针的指针是指一个指针,其存储的是另一个指针的地址。其语法格式为:
type** pointer_name;
type为指针所指向的类型,pointer_name为指针的名称。其中,**表示指向指针的指针运算符。
以下是一个示例,展示如何定义和使用指向指针的指针:
#include <iostream>
int main()
{
int a = 1;
int* p1 = &a;
int** p2 = &p1;
std::cout << "a value: " << a << std::endl;
std::cout << "p1 value: " << *p1 << std::endl;
std::cout << "p2 value: " << **p2 << std::endl;
return 0;
}
在上述示例中,定义了一个指向int类型变量a的指针p1以及一个指向p1的指针p2。通过p2访问a的值需要通过两次解引用操作,即**p2。
示例说明
以下是一个实际应用指针数组和指向指针的指针的示例:
#include <iostream>
void Selection_Sort(double* a[], int n)
{
for(int i = 0; i < n - 1; i++)
{
int min = i;
for(int j = i + 1; j < n; j++)
{
if(*a[j] < *a[min])
{
min = j;
}
}
double* temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
int main()
{
double x = 3.14, y = 1.23, z = 2.02;
double* arr[3] = {&x, &y, &z};
std::cout << "Before sorting: ";
for(int i = 0; i < 3; i++)
{
std::cout << *arr[i] << " ";
}
std::cout << std::endl;
Selection_Sort(arr, 3);
std::cout << "After sorting: ";
for(int i = 0; i < 3; i++)
{
std::cout << *arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
在上述示例中,使用指针数组将double类型的变量x、y、z的地址存储起来。对该指针数组进行选择排序,并打印输出排序前后的值。在排序算法中,由于数组中存储的是指针,因此在访问该指针指向的变量时需要进行解引用操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入解析C++中的指针数组与指向指针的指针 - Python技术站