🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 类型转换 ## 自动转换 数据类型存在自动转换的情况,比如: ~~~ char c='a'; int x; double d; x=c; //字符类型可以自动转换为整形 d=x; //整形可以自动转换为浮点型 ~~~ 自动转换发生在不同数据类型运算时,在编译的时候自动完成。自动转换遵循的规则就好比小盒子可以放进大盒子里面一样. char类型数据转换为int类型数据遵循ASCII码中的对应值 注:字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换 ## 强制类型转换 强制类型转换是通过定义类型转换运算来实现的。其一般形式为: (数据类型) (表达式) 其作用是把表达式的运算结果强制转换成类型说明符所表示的类型,例如: ~~~ double tempOne=6.777; int tempTwo=(int)tempOne; //强制转换为int类型 printf("%f\n",tempOne); printf("%d\n",tempTwo); ~~~ 在使用强制转换时应注意以下问题: 1、数据类型和表达式都必须加括号,如把(int)(x/2+y)写成(int)x/2+y则成了把x转换成int型之后再除2再与y相加了。 2、转换后不会改变原数据的类型及变量值,只在本次运算中临时性转换。 3、强制转换后的运算结果不遵循四舍五入原则 ## 类型限定符 | 限定符 | 含义 | | --- | --- | | extern | 声明一个变量,extern声明的变量没有建立存储空间. `extern int a;` | | const | 定义一个常量,常量的值不能修改. const int a = 10; | | volatile | 防止编译器优化代码 | | register | 定义寄存器变量,提高效率.register是建议型的指令,而不是命令型的指令,如果cpu有空闲寄存器,那么register就生效.如果没有空闲寄存器,那么register无效. |