美文网首页C语言深度学习
C语言学习第5篇---类型转换概念理解

C语言学习第5篇---类型转换概念理解

作者: CodeAllen | 来源:发表于2019-06-01 23:57 被阅读0次
0414.jpg

-- 作者 Allen5G 转载请注明出处
微信公众号「Allen有话说」(微信号:Allen5G)

类型之间的转换

1.C语言中的数据可以进行转换

---强制类型转换

---隐式类型转换

强制类型转换

1.强制类型转换的语法

---(Type)var_name;

---(Type)value;

2.强制类型转换的结果

---目标类型能够容纳目标值,结果不变

---目标类型不能容纳目标值,结果将产生截断

注意:不是所有的强制类型转换都能成功,当不能进行强制转换时,编译器将产生错误信息

实现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; // 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;

}

隐式类型转换

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

注意:低类型到高类型的隐式转换是安全的,不会产生截断

高类型到低类型的隐式转换时不安全的,到是不正确的结果

表达式的隐式转换转换

1.隐式类型转换的发生点

---算术运算中,低类型转换为高类型

---赋值表达式中,表达式的值转换为左边变量的类型

---函数调用时,实参转换为形参的类型

---函数返回值,return表达式转换为返回值类型

** image image.gif

​**

实验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 0;

}

image.gif

小结:

1.强制类型转换由程序员负责完成

---转换可能产生截断

---转换不区分类型的高低

---转换不成功时,编译器给出错误信息

2.隐式类型转换由编译器自动完成

---低类型由高类型的转换是安全的

---高类型向低类型的转换是不安全的

标准C编译器的类型检查是比较宽松的,因此隐式类型转换可能带来意外的错误

相关文章

网友评论

    本文标题:C语言学习第5篇---类型转换概念理解

    本文链接:https://www.haomeiwen.com/subject/wyiztctx.html