621 字
3 分钟
指针
指针定义
指针类型 如:
int a;int *p; //注意:定义指针时的*属于声明,并不是取值符p = &a; //&为取地址符,p存放a的地址所以 *p 等价于 a; //*为取值符指针类型
数组指针
指向数组的指针,存放数组的地址
注意:数组名是首地址,&数组名才是数组地址
指向数组的类型 (*指针变量)[数组中元素个数]
如:
int a[5] = { 1, 2, 3, 4, 5 };int (*p)[5] = &a;for (int i = 0; i < 5; i++) { cout << (*p)[i] << " ";}输出结果:1 2 3 4 5函数指针
指向函数的指针,存放函数的地址
注意:函数名就是函数地址
指向函数的类型 (*指针变量)(函数的参数列表)
如:
int max(int x, int y) { return x > y ? x : y;}int main() { int (*p)(int, int) = max; cout << (*p)(3, 5); //函数指针的调用,*p即运用取值找到该函数 return 0;}输出结果:5指针操作
int *p;p++; //指针p指向下一个p--; //指针p指向上一个
int (*p)[5]= &arr;cout << *(p+1); //指向地址(下标)为1的元素,即arr[1]动态数组
极其节省空间,动态分配数组空间
动态数组的使用有两种方式:1、指针(如*(p+1)) 2、数组下标(如a[1])
指针可以当作数组名,如一级指针p可以当一维数组名,二级指针pp可以当二维数组名
动态一维数组
int main() { int n; cin >> n; int *p = new int[n]; //此处是将p当作数组名看待,申请一个int型大小为n的空间存放int型的指针p for (int i = 1; i <= n; i++) { cin >> *(p+i); } for (int i = 1; i <= n; i++) { cout << *(p+i) << " "; } delete[] p; return 0;}输入:5 1 2 3 4 5
输出:1 2 3 4 5
动态二维数组
运用多级指针实现,主要思路就是把二维数组当作多个一维数组来看待。
int r = 5; //用于表示行数int c = 5; //用于表示列数int **arr = new int*[r]; //开辟一块内存来存放每一行的地址for (int i = 0; i < row; i++) //分别为每一行开辟内存 arr[i] = new int[c];//这是一个r行c列的动态二维数组。