关于CC++指针星号 * 的写法问题
关于C/C++指针星号 * 的写法问题
声明
为了方便理解,本文所举例中采用的"数据类型"都默认用 int 类型。
问题
对比下面不同的书写方式,请仔细体会区别与含义:
int* p; int *p;
您感到什么了吗?
解释
首先要说明,在现代中,很多C++编程规范中,建议星号*与 int 结合,而不是与后面的变量结合。
这样做比较清晰,不容易看错。如下所示,变量 p 里面是记录了变量 num 的"地址"信息:
int* p = #
但是这样做也会产生一定的问题,如下所示:
int* p1, *p2, p3;// 请注意,上面只定义了两个指针变量,分别是 p1 和 p2;而 p3 只是普通变量(int类型)
解决这个问题也很简单,我们只需要规定,一行只能声明一个变量即可,特别是对指针类型来说。
int* p1; // 指针 int* p2; // 指针 int p3; // 普通变量
值得说明的是,这只是一种规范,一种建议;如果不遵守,程序也不会报错。
其次要解释的是,C 语言设计的本意并不是把(int*)作为一个整体。
它的设计本意是解一个方程,请看下面的例子:
先定义一个变量,即,将 (*p) 当作一个整体,然后让(*p)的类型是 int。
从而就能反推出 p 是 int 指针。
这种解方程的语法含义,才是 int *p1, *p2;写法的由来。
同理,函数指针也是这样,int (*func)();
最早调用是必须写成 (*func)() 的,但是经过修改后,写 func() 也可以了。但是本意是"解方程"这种思想。
后来C++的加入,迫使C的规矩出现了一些变化。
但是不论如何,建议用自己最熟悉的就行。
而笔者本人是习惯了int* p; 这种写法。
补充
不管是哪种方式,有一个通用的方法可以快速区分到底是"指针"还是"普通变量"——方法就是,看这个变量前面有没有 * ,如果有 * 就代表它是指针,如果没有 * ,那就它就是普通的变量。
int* p; // p 前面有*,所以是指针 int *p1,*p2, p3; // p1 前面有*,p2前面有*,p3前面没有*,所以p1,p2是指针,而p3是普通变量
OK,就补充这么多,如果有什么错误的地方,欢迎小伙伴们的指正。
最新文章
- Leetcode 【1334. 阈值距离内邻居最少的城市】
- Pandas画图报错:ValueError: signal only works in main thread
- 2013年01月02日 Go生态洞察:深入理解Go语言的实践与进阶
- Python实现WOA智能鲸鱼优化算法优化卷积神经网络回归模型(CNN回归算法)项目实战
- [pytorch]设备选择以及卷积神经网络的应用
- JavaScript红宝书第8章:对象、类与面向对象编程(24)
- 觉非科技发布【轻地图高速NOA智驾方案】
- Qt 自定义event
- 深度学习:多模态与跨模态
- 回顾 — SFA:简化快速 AlexNet(模糊分类)
- 2023代码小技巧
- pdf增强插件 Enfocus PitStop Pro 2022 mac中文版功能介绍
- 模拟退火算法MATLAB实现
- 西门子精智屏数据记录U盘插拔问题总结
- XML Web 服务 Eclipse实现中的sun
- 关于财税体制什么是扁平化?三级财政西方的龙骑兵FIBW 10道练习题第五题
- 轻量封装WebGPU渲染系统示例<28>
- 关于反弹Shell个人的一些理解与学习收获
- C++11 constexpr 常量表达式应用场景
- 【c++】——类和对象(中)——实现完整的日期类