C语言进阶——类型转换04
C语言内可以进行类型转换:
- 强制类型转换
- 隐式类型转换
强制类型转换的语法:
- (tpye)value
- (type)value_name
强制类型转换的结果:
- 目标类型可以容纳目标值:结果不变
- 目标值不要能容纳目标值:结果将产生截断
- 注意:不是所有的强制类型转换都可以成功,当不能进行强制类型转换的时候,编译器将产生错误信息
示例代码1:
#include <stdio.h> 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; // 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 ;
}直接赋值这段代码在23行和25行会产生错误,自定义类型不可以和传统类型进行强制类型转换
隐式类型转换:
- 编译器主动进行的转换
- 注意:低类型到高类型的隐式转换时安全的,不会产生截断;高类型到低类型的隐式转换是不安全的,导致不正确的结果
隐式类型转换的发生点:
- 算数运算中,低类型转换为高类型
- 赋值表达式中,表达式的值转换为左边的类型
- 函数调用的时候,实参转换为形参的类型
- 函数返回值,return表达式转换为返回值类型
下图是隐式类型转换的模式:
- 当char类型和short进行运算时,会先隐式转换为int类型
- 同样其他类型做运算时,都会按照图中的安全类型进行转换

示例代码2:
#include <stdio.h> 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 ;
}
总结:
强制类型转换由程序员负责完成:
- 转换可能产生截断
- 转换不区分类型的高低
- 转换不成功时,编译器给出错误信息
隐式类型转换由编译器自动完成:
- 低类型向高类型的转换时安全的
- 高类型向低类型的转换是不安全的
注意:标准C编译器的类型检查比较宽松,因此隐式类型转换可能带来意外的错误。
C语言进阶——类型转换04的更多相关文章
- 【R笔记】R语言进阶之4:数据整形(reshape)
R语言进阶之4:数据整形(reshape) 2013-05-31 10:15 xxx 网易博客 字号:T | T 从不同途径得到的数据的组织方式是多种多样的,很多数据都要经过整理才能进行有效的分析,数 ...
- 《C语言进阶剖析》课程目录
<C语言进阶剖析>学习笔记 本文总结自狄泰软件学院唐佐林老师的<C语言 ...
- JavaScript进阶系列04,函数参数个数不确定情况下的解决方案
本篇主要体验函数参数个数不确定情况下的一个解决方案.先来看一段使用函数作为参数进行计算的实例. var calculate = function(x, y, fn) { return fn(x, y) ...
- 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01
书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...
- [C语言]进阶|数据类型: 整数, 浮点, 逻辑, 类型转换和条件运算
--------------------------------------------------------------------------------- [C语言的类型] 1. 整型(都分为 ...
- R语言进阶
一.初学入门:<R in Action><The Art of_R Programming>入门者可首选两本,前者从统计角度入手,分高中低三部分由浅入深的讲解了如何用R来实现统 ...
- 详解C语言的类型转换
1.自动类型转换 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0-255( ...
- C语言自动类型转换
自动转换遵循以下规则: 1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算. 2) 转换按数据长度增加的方向进行,以保证精度不降低.(eg:int型和long型运算时,先把int量转成lo ...
- [C语言]进阶|指针与字符串
------------------------------------------------------------------------------------ 回顾:[C语言]指针与字符串 ...
随机推荐
- Android 开发知识结构图
- php一种面向对象的语言,那么什么是面向对象呢?
php一种面向对象的语言,那么什么是面向对象呢? 传统的面向过程的编程思想: 相信很多人第一次接触编程都是c语言,c语言就是非常典型的面向过程的编程语言,将要实现的功能描述为一个从开始到结束的连续的“ ...
- 让你迅速了解redis
(1)什么是redis? Redis 是一个基于内存的高性能key-value数据库. (2)Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数 ...
- python模块详解 sys shutil
sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sy ...
- windows 右健添加cmd快捷通道
windows 右健添加cmd快捷 - Windows - geektown极客堂 - Powered by Discuz!. 把横线下面的文本copy保存到一个注册表文件中,比如cmd.reg,然后 ...
- HDU(1166),线段树模板,单点更新,区间总和
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 第一次做线段树,帆哥的一句话,我记下来了,其实,线段树就是一种处理数据查询和更新的手段. 然后, ...
- 问题 B: 投简历
题目描述 小华历经12寒窗苦读,又经历4年大学磨砺,终于毕业了,随着毕业季的到来,找工作也日益紧张起来.由于要面试不同的公司,因此小华需要准备不同的简历.当然最基本的信息是必不可少的,基本信息:姓名. ...
- JS将unicode码转中文方法
原理,将unicode的 \u 先转为 %u,然后使用unescape方法转换为中文. ? 1 2 3 4 <script type="text/javascript"> ...
- cudaMallocPitch()
- 泛型&&枚举
1.枚举类型 JDk1.5中新增了枚举类型,可以使用该功能取代以往定义常量的方式,同时枚举类型还赋予程序在编译时进行检查的功能. 1.1 使用枚举类型设置常量 以往设置常量,通常将常量放在接口中(fi ...