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

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

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

1、五步法:

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

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

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

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

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

2、栗子:

2.1 非函数的声明

第一个:

int v[5];

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


第二个:

int *v[5];

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


第三个:

int (*v)[5];

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


第四个:

int * (*v)[5];

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


2.1 函数指针分析

第一个:

int (*func)();

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

在这里插入图片描述


第二个:

int (*v[])();

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


最后一个:

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

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


3、const 的分辨

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

int const a; <======> const int a;

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

int const *r;

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

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


int * const r;

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想文艺一点的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值