• 一次性看懂 C/C++ 当中的声明规则 与 const


    学习来源:B站 HexUp,初中生也能看懂的C/C++类型声明规则教学,很简单的!。

    你懂下面这个声明吗?不懂的话,请看接下来的黄金法则,
    在这里插入图片描述

    1、五步法:

    第一步:找到变量名,如果没有变量名,找到最里面的结构

    第二步:向右看,读出你看到的东西,但是不要跳过括号

    第三步:向左看,读出你看到的东西,但是不要跳过括号

    第四步:如果有括号,则跳出一层括号。

    第五步:重复上述类型,直到读出最终的类型。

    2、栗子:

    2.1 非函数的声明

    第一个:

    int v[5];
    
    • 1

    (1)v:就是变量名
    (2)v[5] :说明这是一个数组,里面有五个元素。
    (3)int :代表数组当中的每一个元素都是 int 类型。


    第二个:

    int *v[5];
    
    • 1

    (1)v:就是变量名
    (2)v[5] :说明这是一个数组,里面有五个元素。
    (3)int * :代表每个元素都是一个指针,指向 int 类型的变量。
    在这里插入图片描述


    第三个:

    int (*v)[5];
    
    • 1

    (1)v:就是变量名
    (2)(*v) :括号不能跳过,在此处说明,v 是一个指针
    (3)(*v)[5] : 向右看,v 指向了一个数组,类型为:内部有5个元素的数组。
    (4)int : 里面的 5 个元素的类型为int类型。
    在这里插入图片描述


    第四个:

    int * (*v)[5];
    
    • 1

    (1)v:就是变量名
    (2)(*v) :括号不能跳过,在此处说明,v 是一个指针
    (3)(*v)[5] : 向右看,v 指向了一个数组,类型为:内部有5个元素的数组。
    (4)int * : 里面的 5 个元素的类型为:int * 类型的指针


    2.1 函数指针分析

    第一个:

    int (*func)();
    
    • 1

    (1)func:就是变量名
    (2)(*func) :括号不能跳过,在此处说明,func 是一个指针
    (3)(*func)() : 向右看,func 这个指针指向了一个函数,并且这个函数类型没有形参。
    (4)int : 这个函数的返回值为 int 类型。

    在这里插入图片描述


    第二个:

    int (*v[])();
    
    • 1

    (1)v:就是变量名
    (2)v[] :向右看,v 是一个数组。
    (3)*v[] : 向左看,v这个数组当中,每一个元素都是指针。
    (4)() :跳出括号向右看,代表这些指针指向一个形参为空的函数。
    (5)int :向左看,代表这些指针指向一个返回值为 int 的函数。
    在这里插入图片描述


    最后一个:

    int (*(*v)[])();
    
    • 1

    (1)v:就是变量名
    (2)*v :括号不能跳过,v 是一个指针。
    (3)(*v)[] : 向右看,v是一个指针,指向一个数组。
    (4)* (*v)[] :向左看,这个数组里面又都是指针
    (5)() :向右看,这里面的指针又全部指向一个形参为空的函数。
    (6)int :向左看,代表这些指针指向一个返回值为 int 的函数。
    在这里插入图片描述


    3、const 的分辨

    const 是一个常量声明,没有指针的时候还比较简单:

    int const a; <======> const int a;
    
    • 1

    加入指针之后,继续使用 5 步法:

    int const *r;
    
    • 1

    (1)r :找到变量。
    (2)右边没有东西。
    (3)*r:向左看,代表他是一个指针。
    (4)*int const:再向左看,可以看到它指向的是一个 int const 类型的数据。

    总结:也就是说 r 指向的变量,他自己的内容不能发生改变,反而指针的指向是可以发生改变的。


    int * const r;
    
    • 1

    (1)r :找到变量。
    (2)右边没有东西。
    (3)*const:向左看,代表这个变量 r 他是不能变的。
    (4)* const :再向左看,所以 r 是一个 const 的一个指针。
    (5)* int :再向左看,其指向的是一个 int 类型数据。

    总结:r 自己本身的指向是不能发生改变的,反而指向的变量的内容是可以发生改变的。

  • 相关阅读:
    IIS 日志解析,增强 IIS 服务器安全性
    【AI视野·今日CV 计算机视觉论文速览 第251期】Thu, 21 Sep 2023
    Blazor Server 发起HttpPost请求,但是多参数
    设计模式学习
    Spring Boot 和 Spring Cloud: 区别与联系
    深度解析链动2+1模式,颠覆传统卖货思维?
    二元线性方程组与二阶行列式
    基于Java的个性化旅游攻略系统设计与实现(源码+lw+ppt+部署文档+视频讲解等)
    基于单片机的语音存储与回放系统设计
    一款好看的markdown编辑器:md-editor-v3
  • 原文地址:https://blog.csdn.net/vincent3678/article/details/126715010