博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类型转换
阅读量:3700 次
发布时间:2019-05-21

本文共 1433 字,大约阅读时间需要 4 分钟。

1 类型之间的转换

  • C语言终的数据类型可以进行转换
    • 强制类型转换
    • 隐式类型转换

这里写图片描述

2 强制类型转换

  • 强制类型转换的语法
    • (Type)var_name;
    • (Type)value;
  • 强制类型转换的结果
    • 目标类型能够容纳目标值:结果不变
    • 目标类型不能容纳目标值:结果将产生截断
  • 注意:不是所有的强制类型转换都能成功,当不能进行强制类型转换时,编译器将产生错误信息

实例分析:强制类型转换分析

#include 
struct TS{ int i; int j;};struct TS ts;int main(){ short s = 0x1122; char c = (char)s; // 0x22 int i = (int)s; // 0x00001122 int j = (int)3.1415; // 3 unsigned int p = (unsigned int)&ts; //long l = (long)ts; // error //ts = (struct TS)l; // error printf("s = %x\n", s); printf("c = %x\n", c); printf("i = %x\n", i); printf("j = %x\n", j); printf("p = %x\n", p); printf("&ts = %p\n", &ts); return 0;}输出结果:s = 1122c = 22i = 1122j = 3p = 804a024&ts = 0x804a024

3 隐式类型转换

  • 编译器主动进行的类型转换

这里写图片描述

  • 注意

    • 低类型到高类型的隐式类型转换是安全的,不会产生截断
    • 高类型到低类型的隐式类型转换是不安全的,导致不正确的结果
  • 隐式类型转换的发生点

    • 算术运算式中,低类型转换为高类型
    • 赋值表达式中,表达式的值转换为左边变量的类型
    • 函数调用时,实参转换为形参的类型
    • 函数返回值,return表达式转换为返回值类型

这里写图片描述

实例分析:隐式类型转换分析

#include 
int main(){ char c = 'a'; int i = c; // safe unsigned int j = 0x11223344; short s = j; // unsafe printf("c = %c\n", c); printf("i = %d\n", i); printf("j = %x\n", j); printf("s = %x\n", s); printf("sizeof(c + s) = %d\n", sizeof(c + s)); return 0;}输出结果:c = ai = 97j = 11223344s = 3344sizeof(c + s) = 4

char和short类型进行计算时会先转换到int类型!

4 小结

  • 强制类型转换由程序员负责完成
    • 转换可能产生截断
    • 转换不区分类型的高低
    • 转换不成功时,编译器给出错误信息
  • 隐式类型转换由编译器自动完成
    • 低类型向高类型的转换是安全的
    • 高类型向低类型的转换是不安全的
  • 标准C编译器的类型检查是比较宽松的,因此类型转换可能带来意外的错误
你可能感兴趣的文章
依赖注入
查看>>
Springboot 自动装配原理2
查看>>
Springboot 自动装配原理1
查看>>
Springboot 自动装配流程图详解
查看>>
Springboot 整合mybatis
查看>>
Springboot+mongodb本地环境正常,生产环境报错{java.lang.NoClassDefFoundError: jdk/net/ExtendedSocketOptions}
查看>>
你真的知道get方法与post方法的区别吗?论get方法与post方法上传下载文件的区别
查看>>
swagger配置及升级版swagger-bootstrap-ui配置+访问账号密码登录限制
查看>>
网易云Api,轻松获取音乐数据
查看>>
Spring boot 注解@Async无效,不起作用
查看>>
List与String相互转换
查看>>
阿里巴巴fastjson api使用教程
查看>>
栈与堆的个人理解
查看>>
Lambda表达式概念理解
查看>>
Java 8 Stream 优雅的流式编程, 过滤集合类型的数据lambda表达式
查看>>
浅谈重不重写equals和hashcode对于HashMap添加元素的影响
查看>>
面试题:Redis是单线程,速度为什么会这么快?
查看>>
关于String==和String.intern()的面试题,一文读懂
查看>>
new Hashmap 和 new ArrayList时设置初始化容量多少合适
查看>>
java面试中面试官让你讲讲反射,应该从何讲起?
查看>>