文章目录

  • 一:概述
  • 二:整数提升
  • 三:常用的算术转换
  • 四:错误处理
    • 4.1:概述
    • 4.2:errno/perror()/strerror()

一:概述

强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型。(type_name) expression

实例:

使用强制类型转换运算符把一个整数变量除以另一个整数变量,得到一个浮点数:
#include <stdio.h>
int main(){int sum = 17, count = 5;double mean;mean = (double) sum / count;printf("mean: %f \n", mean);
}
结果:mean: 3.400000
这里要注意的是强制类型转换运算符的优先级大于除法,因此 sum 的值首先被转换为 double 型,然后除以 count,得到一个类型为 double 的值。
类型转换可以是隐式的,由编译器自动执行,也可以是显式的,通过使用强制类型转换运算符来指定。在编程时,有需要类型转换的时候都用上强制类型转换运算符,是一种良好的编程习惯。

二:整数提升

整数提升是把小于int或unsigned int的整数类型转换为int或unsigned int的过程#include <stdio.h>int main(){int i = 17;char c = 'c';   // ascii值是99int sum;sum = i + c;printf("value of sum: %d \n", sum);}结果:value of sum: 116在这里,sum的值为116,因为编译器进行了整数提升,在执行实际加法运算时,把'c'的值转换为对应的ascii值。

三:常用的算术转换

就是隐式的把值强制转换为相同的类型。编译器首先执行整数提升,如果操作数类型不同,则他们会被转换为下列层次中出现的最高层次的类型:int --> unsigned int --> long --> unsigned long --> long long --> unsigned long long --> float --> double --> long double

常用的算术转换不适用于赋值运算符,逻辑运算符&&和||。

让我们看看下面的实例来理解这个概念:

#include <stdio.h>
int main()
{int  i = 17;char c = 'c'; /* ascii 值是 99 */float sum;sum = i + c;printf("Value of sum : %f\n", sum );
}
当上面的代码被编译和执行时,它会产生下列结果:
Value of sum : 116.000000

在这里,c 首先被转换为整数,但是由于最后的值是 double 型的,所以会应用常用的算术转换,编译器会把 i 和 c 转换为浮点型,并把它们相加得到一个浮点数。

四:错误处理

4.1:概述

C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码 errno,该错误代码是全局变量,表示在函数调用期间发生了错误。您可以在 <error.h> 头文件中找到各种各样的错误代码。

所以,C 程序员可以通过检查返回值,然后根据返回值决定采取哪种适当的动作。开发人员应该在程序初始化时,把 errno 设置为 0,这是一种良好的编程习惯。0 值表示程序中没有错误。

4.2:errno/perror()/strerror()

C 语言提供了 perror() 和 strerror() 函数来显示与 errno 相关的文本消息。

perror()函数显示传给它的字符串,后跟一个冒号,一个空格和当前errno值的文本表示形式。

strerror()函数,返回一个指针,指针指向当前errno值的文本表示形式。

#include <stdio.h>
#include <errno.h>
#include <string.h>
extern int errno;
int main(){FILE *pf;int errnum;pf = fopen("unexist.txt", "rb");if(pf == NULL){errnum = errno;fprintf(stderr, "Value of errno: %d \n", errno);perror("Error printed by perror");fprintf(stderr, "Error opening file: %s \n", strerror(errnum));}else{fclose(pf);}return 0;
}
结果:
┌──(root												

020 C语言基础:C语言强制类型转换与错误处理相关推荐

  1. C语言基础教程之强制类型转换

    C 强制类型转换 强制类型转换是把变量从一种类型转换为另一种数据类型.例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型.您可以使用强制类型 ...

  2. 2,Java语言基础-Java语言基本程序设计知识

    Java语言基础 Java语言基本程序设计知识 1,JavaAPI概述 1.1,什么是API API是指应用程序接口( Application Program Interface, API),故名思意 ...

  3. 1,Java语言基础-Java语言概述和必要计算机知识

    Java语言基础 Java语言概述 1,Java语言发展史 Java语言本质 Java是面向对象的高级语言,它是由c和c++发展而来. Java发展语言历史概述 Java 是由 James Gosli ...

  4. WML语言基础-WML语言基础(WAP建站)

    WML语言基础-WML语言基础(WAP建站)一 作者:青燕    来源:青燕网    更新时间:2007-8-19 19:22:22    浏览次数:255 完成wap服务器的建立和wap浏览器的安装 ...

  5. C语言里 指针变量强制类型转换,C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)...

    强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整 ...

  6. C语言的数据的强制类型转换

    定义:强制类型转换是把变量从一种类型转换为另一种数据类型. 强制类型转换算是C语言中常见常考的一项内容,如对于类型处理不好,将会产生错误结果.对于某些类型的转换编译器可隐式地自动进行,不需人工干预,称 ...

  7. c语言强制转换为结构体,C语言结构体的强制类型转换

    陈浩师兄03年的一篇博客<用C写有面向对象特色的程序>描述了用C语言来实现相似C++类继承的方法,这样方法的核心要点就是结构体的强制类型转换,让我来简单分析分析C语言中的结构体强制类型转换 ...

  8. c语言struct结构体强制类型转换

    1.无结构体标签 struct {int in;int out;}GPIO_t; 声明了一个无名结构体,并创建了一个结构体变量GPIO_t(已分配空间),该方法只适合创建一个结构体变量 typedef ...

  9. python语言基础-Python语言基础与应用

    spContent=本课基于主讲教师在北京大学讲授数据结构与算法课(Python版)的多年教学实践经验,面向零编程基础的大学生和社会公众,全面讲授Python语言基础,培养学生计算思维的能力,并讲解P ...

最新文章

  1. Activity has leaked window that was originally added
  2. html游戏禁止微信浏览器下拉,如何用电脑模拟微信浏览器浏览禁止PC打开的微网站...
  3. 计算机网络应用基础第一章试题,计算机网络应用基础第一章测试题
  4. oracle怎么格式化sql语句,Oracle sqlplus格式化数据
  5. android跨进程事件注入(程序模拟用户输入)
  6. 小猿圈之java文件重命名
  7. [BZOJ3676][Apio2014]回文串
  8. 转Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
  9. Html可以输入的下拉框设计
  10. js检测微信浏览器_JavaScript判断是否是微信浏览器
  11. 简易PDF电子书书签制作
  12. 华为OSPF多区域配置实例
  13. 【hbase】解决海量图片存储
  14. flash制作文字笔顺_汉字标准读音与笔顺Flash版
  15. 服务器 文件 图标 锁,文件夹和文件图标有锁的原因及去除(含Win7)
  16. 常用坐标系汇总(更新)
  17. iphone设置邮箱设置_如何使用iPhone设置Chromecast
  18. Noya批量加解密工具使用方法
  19. Python 变量作用域与函数(4)
  20. awgn信道中的噪声功率谱密度_Ruminate: 噪声的功率谱密度与方差

热门文章

  1. Android 卡顿调研
  2. 企业园区网络的综合设计 (一)
  3. pwd命令 – 显示当前工作目录的路径
  4. 变分自编码器——从全概率角度解读
  5. 分享 5 个 JSON 相关的常用小技巧
  6. 2021/1/3-每日三题第10弹:雨停了天晴了,你又觉得你行了?你知道渐进增强和优雅降级之间有什么不同吗???
  7. 新生代Eden区、两个Survivor区及老年代的关系
  8. 宏定义和inline函数的关联
  9. 一步解决模式vcruntime140.dll丢失问题
  10. 解决RabbitMQ数据丢失