前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言-强制类型转换

C语言-强制类型转换

原创
作者头像
用户8639654
修改2021-07-21 15:11:36
2.3K0
修改2021-07-21 15:11:36
举报
文章被收录于专栏:云计算运维

经常使用的东西

强制类型转换这个东西非常频繁的被使用,而且如果用的好的话,会非常的爽,我写个简单的例子。

代码语言:javascript
复制
#include "stdio.h"

void func(void *s)
{
	char * str = (char *)s;
	printf("str:%s\n",str);
}

void main(void)
{
	char * strIn = "Linux is my world";
	func(strIn);
}

执行结果

代码语言:javascript
复制
root@ubuntu:~/project# gcc 2.c && ./a.out
str:Linux is my world
root@ubuntu:~/project# cat 2.c

隐式类型转换

我们写代码的时候,在类型转换的时候,通常在前面加上类型的名字,如果不加的话,不同的类型进行运算,编译器自己去判断如何进行转换,这种方式就是隐式类型转换。

  • 由编译器自己完成,无需用户的任何外部触发器。
  • 通常在表达式中存在多个数据类型时发生。在这种情况下,类型转换(类型提升)发生以避免数据丢失。
  • 变量的所有数据类型都升级为具有最大数据类型的变量的数据类型。

bool - > char - > short int - > int - > unsigned int - > long - > unsigned - > long long - > float - > double - > long double

  • 隐式转换可能会丢失信息,符号可能会丢失,并且可能发生溢出(当long long被隐式转换为float时)。

举个例子

代码语言:javascript
复制
#include<stdio.h> 
int main() 
{ 
    int x = 10;    
    char y = 'a';  
    // 'a' is 97 
    x = x + y; 
     
    float z = x + 1.0; 
  
    printf("x = %d, z = %f", x, z); 
    return 0; 
} 

结果输出

root@ubuntu:~/project# gcc 3.c && ./a.out x = 107, z = 108.000000

显式类型转换

此过程也称为类型转换,它是用户定义的。在这里,用户可以键入强制转换结果以使其具有特定的数据类型。

C中的语法:

(类型)表达

举个例子

代码语言:javascript
复制
#include<stdio.h> 
  
int main() 
{ 
    double x = 1.2; 
    int sum = (int)x + 1; 
  
    printf("sum = %d", sum); 
  
    return 0; 
} 

结果输出

root@ubuntu:~/project# gcc 4.c && ./a.out sum = 2

类型转换,还有一些比较神奇的,数组名转成指针,指针转成数组名等,其中还有各种BUG等着你们,各位可以过去看看。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 经常使用的东西
  • 隐式类型转换
  • 显式类型转换
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档