ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:24.03KB ,
资源ID:18120763      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18120763.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C C++中typedef struct和struct的用法Word文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C C++中typedef struct和struct的用法Word文档格式.docx

1、37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 结构别名;49. 50. 51. 52. 53. 54. 另外注意:在C中,struct不能包含函数。在C+中,对struct进行了扩展,可以包含函数。55. 56. 57. 58. = 59. 60. 61. 62. 实例1:struct.cpp 63. 64. 65. 66. #include67. 68. usingnamespacestd;69. 70. typedef_point 71. 72. intx;73. 74. y;75. 76. point;/定义类,给类一个别名77. 78.

2、 79. 80. struct_hello 81. 82. x,y;83. 84. hello;/同时定义类和对象 85. 86. 87. 88. 89. 90. intmain() 91. 92. 93. 94. pointpt1;95. 96. pt1.x=2;97. 98. pt1.y5;99. 100. coutptpt1.x=pt.y=endl;101. 102. 103. 104. /hellopt2;105. 106. /pt2.x8;107. 108. /pt2.y=10;109. 110. /coutvs;333. 334. typedef还可以掩饰符合类型,如指针和数组。例

3、如,你不用象下面这样重复定义有81个字符元素的数组:charline81;335. 336. chartext81;337. 338. 定义一个typedef,每当要用到相同类型和大小的数组时,可以这样:Line81;339. 340. Linetext,secondline;341. 342. getline(text);343. 344. 同样,可以象下面这样隐藏指针语法:pstr;345. 346. intmystrcmp(pstr,pstr);347. 348. 这里将带我们到达第一个陷阱。标准函数strcmp()有两个const*类型的参数。因此,它可能会误导人们象下面这样声明mys

4、trcmp():mystrcmp(constpstr,const349. 350. 这是错误的,按照顺序,constpstr被解释为charconst(一个指向的常量指针),而不是const(指向常量的指针)。这个问题很容易解决:cpstr;351. 352. intmystrcmp(cpstr,cpstr);/现在是正确的 353. 354. 记住:不管什么时候,只要为指针声明typedef,那么都要在最终的名称中加一个const,以使得该指针本身是常量,而不是对象。代码简化 355. 356. 上面讨论的行为有点像#define宏,用其实际类型替代同义字。不同点是在编译时被解释,因此让编译

5、器来应付超越预处理器能力的文本替换。(*PF)(const*,*);357. 358. 这个声明引入了PF类型作为函数指针的同义字,该函数有两个类型的参数以及一个类型的返回值。如果要使用下列形式的函数声明,那么上述这个是不可或缺的:Register(PFpf);359. 360. Register()的参数是一个类型的回调函数,返回某个函数的地址,其署名与先前注册的名字相同。做一次深呼吸。下面我展示一下如果不用typedef,我们是如何实现这个声明的:(*Register(int(*pf)(const*) 361. 362. (const363. 364. 很少有程序员理解它是什么意思,更不用

6、说这种费解的代码所带来的出错风险了。显然,这里使用不是一种特权,而是一种必需。持怀疑态度的人可能会问:OK,有人还会写这样的代码吗?,快速浏览一下揭示signal()函数的头文件csinal,一个有同样接口的函数。和存储类关键字(storageclassspecifier) 365. 366. 这种说法是不是有点令人惊讶,typedef就像auto,extern,mutable,static,和register一样,是一个存储类关键字。这并是说会真正影响对象的存储特性;它只是说在语句构成上,typedef声明看起来象static,extern等类型的变量声明。下面将带到第二个陷阱:FAST_C

7、OUNTER;错误 367. 368. 编译通不过。问题出在你不能在声明中有多个存储类关键字。因为符号已经占据了存储类关键字的位置,在声明中不能用register(或任何其它存储类关键字)。促进跨平台开发 369. 370. typedef有另外一个重要的用途,那就是定义机器无关的类型,例如,你可以定义一个叫REAL的浮点类型,在目标机器上它可以i获得最高的精度:doubleREAL;371. 372. 在不支持的机器上,该看起来会是下面这样:373. 374. 并且,在连都不支持的机器上,该看起来会是这样:、typedeffloat375. 376. 你不用对源代码做任何修改,便可以在每一种

8、平台上编译这个使用类型的应用程序。唯一要改的是本身。在大多数情况下,甚至这个微小的变动完全都可以通过奇妙的条件编译来自动实现。不是吗?标准库广泛地使用来创建这样的平台无关类型:size_t,ptrdifffpos_t就是其中的例子。此外,象std:stringofstream这样的还隐藏了长长的,难以理解的模板特化语法,例如:basic_stringchar,char_traits,allocatorbasic_ofstream。377. 378. 379. 380. 381. 382. typedef#define的问题有下面两种定义pStr数据类型的方法,两者有什么不同?哪一种更好一点?*

9、pStr;383. 384. #definepStr*;385. 386. 答案与分析:387. 388. 通常讲,typedef要比#define要好,特别是在有指针的场合。请看例子:*pStr1;389. 390. #definepStr2391. 392. pStr1s1,s2;393. 394. pStr2s3,s4;395. 396. 在上述的变量定义中,s1、s2、s3都被定义为char*,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。#define用法例子:f(x)x*x 397. 398. main() 399. 400. 401.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1