类型转换

类型转换

类型之间的转换:

  • 强制类型转换
  • 隐式类型转换
int main()                                             
{
    long l = 800;
    int i = (int) l;
    return 0;
}
int main()
{
    int i = 280;
    char a = i;
    return 0;
}

强制类型转换的结果:

  • 目标类型能够容纳目标值:结果不变
  • 目标类型不能容纳目标值:结果将产生截断

注意: 并不是所有的类型都能进行强制转换
例子:

#include <stdio.h>

struct TS
{
    int i;
    int j;
};
struct  TS ts;

int main(int argc, char const *argv[])
{
    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;
}

结果:
1020750-20161114112439654-2056515191.png

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

  • 当低类型到高类型,不会产生截断
  • 当高类型到低类型,会产生截断

隐式类型转换的发生点

  • 算术运算中
  • 赋值表达式中
  • 函数调用中
  • 函数返回值
    1020750-20161114112512982-963335998.jpg
#include <stdio.h>
int main(int argc, char const *argv[])
{
    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));

    return 0;
}

结果:
1020750-20161114112525717-2064243233.png

总结:

  • 强制类型转换由程序员负责
  • 隐式类型转换由编译器自动完成

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

转载于:https://www.cnblogs.com/yanyun888/p/6061194.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值