IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C深刨4 ——bool与0,浮点数与0比较,指针与0比较,详解强制类型转换 -> 正文阅读

[C++知识库]C深刨4 ——bool与0,浮点数与0比较,指针与0比较,详解强制类型转换

if else语法

**什么是语句:
C语言中由一个分号;隔开的就是一条语句。比如:
printf(“hehe”);
1+2;
**
**啥是表达式:
C语言中,用各种操作符把变量连起来,形成有意义的式子,就叫做表达式。
操作符:+,-,*,/,%,>,<,=,==…
**
**基本语法:
语法结构:
1
if(表达式)
语句;

2
if(表达式)
语句1;
else
语句2;

  1. 多分支
    if(表达式1)
    语句1;
    else if(表达式2)
    语句2;
    else
    语句3;
    **
    if 语句的细节!!!
int ret(){
	printf("这样也行因为if语句先执行()里面的 \n");
	return 1;
}
int main()
{
	int flag = 1;
	//1.首先明确if语句先执行()里的表达式or函数,得到真假
	//2.进行 判定功能
	//3.再进行 分支功能
	/*if (flag == 1){
		printf("hello world\n");
	}*/
	if (ret()){
		printf("yes\n");
	}
	return 0;
}

bool与0比较

C语言有没有bool类型?
c99之前,主要是c90是没有的,目前大部分书,都是认为没有的。因为书,一般都要落后于行业。

但是c99引入了_Bool类型(你没有看错,_Bool就是一个类型,不过在新增头文件stdbool.h中,被重新用宏写成了
bool,为了保证C/C++兼容性)。

#include<stdbool.h>//必须引这个头文件,否者报错
int main(){
	/*bool i = true;
	if (i){
		printf("真\n");
	}*/
	bool k = false;
	if (k){
		printf("假\n");
	}
	return 0;
}

bool定义的变量占几个字节呢
在这里插入图片描述
还有一种微软的定义方法,强烈不推荐

在这里插入图片描述总结:bool在c90,c89中没有,按照整形的 0为假,非零为真,在c99中用bool,大家用整型比较就行
整型比较注意:

#include<stdio.h>
#include<float.h>
#include<stdbool.h>
int main(){
	int a = 0;
	if (a == 0){
		;//不推荐,此时if先要执行括号里的表达式
	}
	if (a != false){
		;//不推荐,false是C99中的概念
	}
	if (a){
		;//推荐a应当被看作bool型,就是括号中不是真就是假了,少了第一种情况的,执行表达式的过程了
	}
	return 0;
}

结论:bool类型,直接判定,不用操作符进行和特定值比较。

float与0比较

在这里插入图片描述

我们可以看到浮点数再内存存在精度的丢失
在这里插入图片描述我们看到i是1.0 减 0.9应该等于0.1呀,但是啥也没打印这就是精度丢失的问题
所以浮点数不能直接用==比较
这可咋办呢
两个浮点数相比较可以用一个函数fabs,来比较两个浮点数相等不相等
在这里插入图片描述
fabs是求绝对值的函数,因为i-0.9-j不能等于纯零,所以C语言就规定两个数相减,要是结果小于这个误差就说这两个数相等
说明一下这个合法误差:因为浮点数再存储的时候是存在精度丢失的,俩个数不能直接比较相等,所以引用了这个误差,我画个图就明白了
在这里插入图片描述图中是结果不为0,但在这个范围之内
这个精度我们还是可以自己自定义的
在这里插入图片描述
言归正传浮点数和零比较
在这里插入图片描述
如果和0比较,直接判断这个浮点数在不在这个精度之间


在这里插入图片描述
那这个等于号要不要加能,分析一下,这个EPS是规定的最小误差,一个浮点数加上这个误差,就不等于原始的浮点数了,所以在我看来就不能加等号
在这里插入图片描述
根据上面证明,不应该加等号,应该是个开区间!!!

指针与0比较!!!

在这里插入图片描述
所以经上面所述,定义变量必须初始化,但是初始化,表达式两边的类型必须是相同的,比如说,一个double赋給int,不就发生截断了嘛
接下来,我们看一下,C语言中的三个0
在这里插入图片描述看打印出来是一样的,这说明在数据层面是一样的,在类型层面是不一样的,解释一下
在这里插入图片描述
在C语言的内部只是把0强制准换为了void*类型的指针,在底层内存中存放的还是0值,内存中的数据没有发生任何变化,这我们详细解说一下强制类型转换;

如何理解强制类型准换呢?

在这里插入图片描述在这里插入图片描述

else的配对,与if爱出现的问题

int main(){
	int i = 0;
	int j = 10;
	if (10==i)
	    if (11 == j)
		   printf("我喜欢你\n");
	else printf("想多了吧\n");
	return 0;
}

在这里插入图片描述
为啥啥也没输出?

因为else之和最近的if配对
在这里插入图片描述
这样就很好啦,强烈建议加大括号,阅读性好
if语句爱出错误点
在这里插入图片描述
if不加大括号只对后面一条语句执行,C语言以分号结尾就是一条语句呀
如果有什莫错误,尽管指出,必虚心学习,如果感觉还行,期望三连关注哦,感谢您的支持!!!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:15:23  更:2021-10-12 23:17:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 20:25:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计