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语言以分号结尾就是一条语句呀

如果有什莫错误,尽管指出,必虚心学习,如果感觉还行,期望三连关注哦,感谢您的支持!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值