当前位置: 首页 > news >正文

typedef 优于 #define

案例一:

通常讲,typedef要比#define要好,特别是在有指针的场合。请看例子:

typedef char *pStr1;

#define pStr2 char *;

pStr1 s1, s2;

pStr2 s3, s4;

在上述的变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。

案例二:

下面的代码中编译器会报一个错误,你知道是哪个语句错了吗?

typedef char * pStr;

char string[4] = "abc";

const char *p1 = string;

const pStr p2 = string;

p1++;

p2++;

是p2++出错了。这个问题再一次提醒我们:typedef和#define不同,它不是简单的文本替换。上述代码中const pStr p2并不等于const char * p2。const pStr p2和const long x本质上没有区别,都是对变量进行只读限制,只不过此处变量p2的数据类型是我们自己定义的而不是系统固有类型而已。因此,const pStr p2的含义是:限定数据类型为char *的变量p2为只读,因此p2++错误。

 

相关文章:

  • c# .net core System.Xml.Serialization 需使用包 System.Xml.XmlSerializer补齐属性
  • 无限轮播(循环展示)
  • ArcGIS API for JavaScript开发笔记(一)——ArcGIS for Javascript API 3.14本地部署
  • Vs2017获取Git空仓库后创建解决方案及项目无法推送,推送失败的问题.
  • 【编程程序猿艺术】学习记录1:指针向左翻转法的旋转串
  • Windows XP 死期将至 微软终于伸援手了
  • xen的实时迁移(四)
  • 递归3--棋盘分割
  • android网络开源框架volley(五岁以下儿童)——volley一些细节
  • 查看自己的电脑的内存扩充-最大
  • MySQL错误Another MySQL daemon already running with the same unix socket.v
  • CSS制作响应式正方形及其应用
  • css中attribute selector及pseudo class
  • “考虑不全面”导致的大问题!!!
  • [Linux]于Mac在配置Linuxserver安装Nginx+PHP
  • Google 是如何开发 Web 框架的
  • [case10]使用RSQL实现端到端的动态查询
  • Angular2开发踩坑系列-生产环境编译
  • CentOS 7 修改主机名
  • Elasticsearch 参考指南(升级前重新索引)
  • ES6 学习笔记(一)let,const和解构赋值
  • js算法-归并排序(merge_sort)
  • Linux CTF 逆向入门
  • Map集合、散列表、红黑树介绍
  • 搞机器学习要哪些技能
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 删除表内多余的重复数据
  • 数据可视化之 Sankey 桑基图的实现
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 小程序button引导用户授权
  • 移动端解决方案学习记录
  • elasticsearch-head插件安装
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • #### go map 底层结构 ####
  • #传输# #传输数据判断#
  • #每日一题合集#牛客JZ23-JZ33
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (33)STM32——485实验笔记
  • (C语言)fread与fwrite详解
  • (k8s中)docker netty OOM问题记录
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (四)鸿鹄云架构一服务注册中心
  • (译)计算距离、方位和更多经纬度之间的点
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)Linq学习笔记
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .NET Core引入性能分析引导优化
  • .net 无限分类
  • .NET值类型变量“活”在哪?
  • [Android 13]Input系列--获取触摸窗口
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!
  • [CISCN2019 华东南赛区]Web11