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)

这个为指向指针函数的函数指针

 

返回目录

posted @ 2023-05-16 21:28  微纯册  阅读(26)  评论(0编辑  收藏  举报