10.二级指针,指针的动态存储,常量与指针的结合、指针与数组的结合及指针函数
- 二级指针的语法
- 指针的动态存储
- 常量指针和指针常量
- 指针数组和数组指针
- 指针和函数的结合
二级指针的语法
语法:数据类型 ** 变量名
数据类型 * 变量名[常量]
int a = 10; int* p=&a; int** dp=&p; cout << p << " " << *dp << " " << **dp;
输出结果:
指针的动态存储
指针变量名 =new 类型名(常量)
指针分配动态地址后,要释放内存地址,否则会造成地址缺失;
int* p; p = new int(6); // 给p分配动态内存 delete[]p; // 释放内存地址
p=NULL // 防止"野指针"产生
常量指针和指针常量
常量指针
指向常量的指针
语法特性:
const int* g; // 常量指针 int v = 7; g = &v; //*g = 4; // 此串代码无法执行
无法通过指针来修改值
指针常量
语法特性:
无法通过地址进行赋值
int v = 7; int* const g=&v; // 指针常量 //g = &v; // 此串代码无法执行
指针与数组得结合
指针数组
语法:数据类型 * 数组名[整数常量]
指针数组是一个数组,数组元素是指针
int a[2][2] = { 1,2,3,4 }; int* q[2]; // 指针数组 // q = a; // 无法赋值 q[0] = a[0]; q[1] = a[1]; for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) { cout << q[i][j] <<" "; }}
输出结果为:1 2 3 4
数组指针
语法:数据类型 (* 数组名)[整数常量]
指向数组地址的指针
int a[2][2] = { 1,2,3,4 }; int(* q)[2]; // 指针数组 q = a; //q[0] = a[0]; // 无法赋值 //q[1] = a[1]; // 无法赋值 for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) { cout << q[i][j] <<" "; }}
输出结果为:1 2 3 4
指针和函数的结合
指针函数
语法: 数据类型*函数名(参数名)
返回指针的函数
int* add(int a, int b) { int c; c = a + b; return&c; } int main() { cout << *add(2, 3); return 0; }
输出为5
函数指针
语法:数据类型*(函数名)(参数名)
指向函数的指针
int *(*Func)(int c,int b)
这个为指向指针函数的函数指针