[C语言]

跟着狄泰唐老师的C语言课程学习的笔记之类型转换

[复制链接]
608|0
手机看帖
扫描二维码
随时随地手机跟帖
Damon_1|  楼主 | 2017-5-22 15:24 | 显示全部楼层 |阅读模式
1.类型之间的转换
C语言中的数据类型可以进行转换
A.强制类型转换
B.隐式类型转换
2.强制类型转换
强制类型转换的语法
A.(Type)var_value;
B.(Type)value;
强制类型转换的结果
A.目标类型能够容纳目标值:结果不变
B.目标类型不能容纳值:结果将产生截断
注意:不是所有的强制类型转换都能成功的,当不能进行强制类型转换时,编译器将产生错误信息
3.强制类型转换的示例程序
#include<stdio.h>
struct TS
{
        int i;
        int j;
};
int test1()
{
        short s = 0x1122;
        char c = (char)s; //0x22;
        int i = (int)s; //0x00001122
        int j = (int)3.1415;//3
        struct TS ts;
        //如果在32下,不会发生截断,在64位下会发生截断
        unsigned int p = (unsigned int)&ts;
        //long l = (long)ts;//转换错误,编译错误
        //ts = (struct TS)l;//转换错误,编译错误
        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;
}
4.隐式类型转换
隐式类型转换
A.编译器主动进行的类型转换
注意:       
A.低类型到高类型的隐式类型转换式安全的,不会产生截断
B.高类型到低类型的隐式类型转换式不安全的,导致正确的结果
5.隐式类型转换发生的地方
算术运算式中,低类型转为高类型
赋值运算中,表达式的值转换为左边变量的类型
函数调用时,实参转化为形参的类型
函数返回值,return表达式转换为返回值类型

6.隐式类型转换示例程序
int test2()
{
        char c = 'a';
        int i = c;
        unsigned int j = 0x11223344;
        short s = j;

        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)); //会转换为int类型 占4个字节
        return 0;
}
7.小结
强制类型转换有程序猿负责完成
A.转换可能产生截断
B.转换不区分类型的高低
C.转换不成功时,编译器给出错误信息
隐式类型转换有编译器自动完成
A.        低类型向高类型的转换时安全的
B.        高类型向低类型转换是不安全的
注意:标准C编译器的类型检查是比较宽松的,因此隐式类型转换可能带来意外的错误。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

10

帖子

1

粉丝