关于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,就补充这么多,如果有什么错误的地方,欢迎小伙伴们的指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/115585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kaggle新赛:UBC卵巢癌亚型分类和异常检测大赛【图像分类】

赛题名称:UBC Ovarian Cancer Subtype Classification and Outlier Detection (UBC-OCEAN) 赛题链接:https://www.kaggle.com/competitions/UBC-OCEAN 赛题背景 卵巢癌是女性生殖系统最致命的癌症。目前,卵巢癌诊断依赖病理学家评估亚型。…

为1024征文活动用心用意而写的文稿

现在我在听的歌,名叫《Loser》。相信你可能听过,Bigbang的。里面有句歌词是这样的:把手伸了出来,却没有任何人握住我的手。不管生活怎样,希望看到这篇文章的你,可以带着自己和带着自己的倔强,一…

B-tree(PostgreSQL 14 Internals翻译版)

概览 B树(作为B树访问方法实现)是一种数据结构,它使您能够通过从树的根向下查找树的叶节点中所需的元素。为了明确地标识搜索路径,必须对所有树元素进行排序。B树是为有序数据类型设计的,这些数据类型的值可以进行比较和排序。 下面的机场代…

【手写数据库toadb】SQL字符串如何被数据库认识? 词法语法分析基础原理,常用工具

词法语法分析 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段…

二叉树题目:最大二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:最大二叉树 出处:654. 最大二叉树 难度 5 级 题目描述 要求 给定一个没有重复元素的整数数组 num…

Ubuntu OpenLDAP配置笔记

Ubuntu OpenLDAP配置笔记 问题(需求)LDAP服务端安装slapd和ldap-utils配置域名编辑hosts修改主机名验证增加一个域账号修改用户的密码 Linux桌面加域安装软件验证允许远程账号首次登录时自动创建HOME目录桌面登录 其它问题Ubuntu更新和安装太慢LDAP服务端…

正则表达式:文本处理中的瑞士军刀

正则表达式是用于提取字符串规律的规则,通过特定语法表达,以匹配符合该规律的字符串。它具有通用性,不仅适用于Python,也可用于其他编程语言。 下面我用Python的re模块来进行实战演示:(记得import re&…

推荐一款支持异步批量下载图片的chrome插件——图片助手(ImageAssistant) 批量图片下载器

https://chrome.google.com/webstore/detail/imageassistant-batch-imag/dbjbempljhcmhlfpfacalomonjpalpko/related?hlzh-CNhttps://chrome.google.com/webstore/detail/imageassistant-batch-imag/dbjbempljhcmhlfpfacalomonjpalpko/related?hlzh-CN 安装后直接点击 会根据…

分治法,动态规划法,贪心法,回溯法主要概括

目录 分治法,动态规划法,贪心法,回溯法主要概括 1.前言2.分治法2.1基本思想:2.2适用条件:2.3时间复杂度:2.4主要解决:2.5关键字:2.6其他: 3.动态规划法3.1基本思想&…

强化学习问题(7)--- Python和Pytorch,Tensorflow的版本对应

1.问题 之前下载的python3.8,在对应Pytorch和Tensorflow时没太在意版本,在运行一些代码时,提示Pytorch和Tensorflow版本过高,直接降下来,有时候又和Python3.8不兼容,所以又在虚拟环境搞一个Pyhon3.7&#x…

JAVA毕业设计101—基于Java+Springboot的电影购票微信小程序带后台管理(源码+数据库)

基于JavaSpringboot的电影购票微信小程序带后台管理(源码数据库)101 一、系统介绍 本系统是小程序前台,带后台管理 本系统分为管理员、用户两种角色 管理员功能: 登录、统计分析、密码修改、用户管理、广告管理、影院管理、分类管理、电影管理、场次…

babel6使用ES2020最新js语法

babel6使用ES2020最新js语法 Babel 6 原本是不支持 ES2020 语法,因为它是在 Babel 7 中引入的。如果您想使用 ES2020 语法,您需要将 Babel 6 升级到 Babel 7 或更高版本(推荐),当然也可以在bebel6中安装支持某个语法的plugin,比如你想使用 ES2020 中的可…

UI自动化测试,让测试高效起来

RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块,覆盖了整个产品测试周期。 RunnerGo UI自动化基于Selenium浏览器自动化方案构建,内嵌高度可复用的测试脚本,测试团队无需复杂的代码编写即可开展低代码的自动化…

软件测试常用的8种功能测试类型有哪些?

软件测试常用的8种功能测试类型有哪些? 单元测试 单元测试确保在一个段中编写的每一段代码都能产生最佳结果。开发人员在单元测试期间只看接口和确定部件。它提供了代码进展的文档,因为每个代码单元在继续下一个之前都经过了彻底的测试。 集成测试 至少对…

【算法设计】递归与分治算法设计——二分搜索、假币识别问题(C++实现)

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法分析与设计知识专栏&#xff1a;算法分析&#x1f525; 给大家跳…

docker学习-常用命令

//ubuntu中简单创建新用户的方法 sudo adduser robot //docker和docker-compose的安装 sudo apt install docker docker-compose //加入docker用户组&#xff1a; sudo groupadd docker #添加docker用户组 sudo gpasswd -a ${USER} docker #将用户加入到docker用户组中…

Echart图表收起/展开后无法重新渲染实现自适应(亲测有效)-开发bug总结5

问题描述&#xff1a; 后台管理系统&#xff0c;左侧的菜单栏是可以展开/收起的&#xff0c;默认是展开&#xff0c;此时页面上的图表加载正常&#xff0c;如果收起后再展开&#xff0c;页面底部就会出现滚动轴&#xff0c;图表没有重新绘制。 网上也查了很多方法。基本都是通…

数字化驱动基础网络建设升级:实现高效信息传输的关键

随着科技的飞速发展&#xff0c;数字化驱动基础网络建设升级已成为当今社会的重要议题。信息传输的高效性和安全性对于现代社会的发展至关重要。本文将深入探讨数字化驱动基础网络建设升级的重要性、现状、升级措施以及未来发展趋势&#xff0c;旨在为相关领域提供有益的参考。…

“中国版Zara”拉夏贝尔:从辉煌到破产清算

文/ 大力财经 拉夏贝尔的破产清算&#xff0c;让人不禁惋惜。这个曾经被誉为“中国版Zara”的女装品牌&#xff0c;在全国拥有超过2000家门店&#xff0c;一度是年轻人的追捧对象。 然而&#xff0c;由于市场竞争激烈、品牌定位模糊、库存积压严重等问题&#xff0c;拉夏贝尔…