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语言]指针与字符串 ...
随机推荐
- CSS的相对定位和绝对定位(position)
什么是定位呢? 定位(position),故名思议,就是确定元素在页面中的位置. CSS的常用定位有两种,一种是相对定位,一种是绝对定位. 下面我们看例子 <html> <head& ...
- CSS Grid 布局学习笔记
CSS Grid 布局学习笔记 好久没有写博客了, MDN 上关于 Grid 布局的知识比较零散, 正好根据我这几个月的实践对 CSS Grid 布局做一个总结, 以备查阅. 1. 基础用法 Grid ...
- 学习Geodatabase的总结
一.怎样择取自己需要的.有用的资料 1.开始找资料时,首先想到的是ESRI的帮助文档,因为它直接.规范而系统.通读一遍之后,大致了解了Geodatabase的各个方面.再从帮助文档体系结构中选出重要的 ...
- linux下查找字符串
如果你想在当前目录下 查找"hello,world!"字符串,可以这样: grep -rn "hello,world!" * * : 表示当前目录所有文件,也可 ...
- django choice字段模板展示
class UserInfo(AbstractUserInfo): """ 用户表 """ gender_choice = ( (1,&qu ...
- Linux 使用第三方邮箱发邮件的设置
mail命令在Ubuntu下是需要安装的,使用下条命令进行安装: sudo apt-get install heirloom-mailx 在CentOS 下安装则是: yum install mail ...
- failed: No module named 'catkin_pkg' Make sure that you have installed "catkin_pkg"
https://stackoverflow.com/questions/43024337/why-this-error-when-i-try-to-create-workspaces-in-ros# ...
- IOS中 copy ,strong ,weak ,assign使用区别
.@property属性的用法 * weak(assign) : 代理\UI控件 * strong(retain) : 数组.模型)其他对象(除代理\UI控件\字符串以外的对象) * copy ...
- C sharp #003# 面向对象编程基本构件
饮水思源:金老师的自学网站 索引 类的属性 简化字段/属性的初始化 命名空间 程序集 类的属性 字段+get/set方法=属性 (之前都是把字段和属性混着用..) 经典写法: using System ...
- when 让你跳出异步回调噩梦 node.js下promise/A规范的使用
其实关于promise 的博客,前端时间专门写了一篇关于 promise 规范的文章,promise规范 让 javascript 中的异步调用更加人性化. 简单回忆下: promise/A规范定义的 ...