指针
指针,存放的是地址,指向地址上的值
一般的,指针的用处是 1、实现动态数组 2、实现链表等数据结构
指针定义
指针类型 * 指针变量
如:
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列的动态二维数组。
链表
标签:指向,int,地址,数组名,数组,指针 From: https://www.cnblogs.com/codaaaa/p/17708991.html