learn_C_deep_6 (布尔类型、布尔与“零值“、浮点型与“零值“、指针与“零值“的比较)(上)

简介: learn_C_deep_6 (布尔类型、布尔与“零值“、浮点型与“零值“、指针与“零值“的比较)

语句和表达式的概念


C语言中由一个分号;隔开的就是一条语句


printf("Hello!\n");

1+2;


C语言中,用各种操作符把变量连接起来,形成有意义的式子,就叫做表达式


1+2


if语句的多种语法结构


1.if语句

if(表达式)   
    语句;


2.if - else语句

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


3.if - else if - else语句

//多分支    
if(表达式1)    
    语句1;
else if(表达式2)    
    语句2;
else    
    语句3;


注释的便捷方法(环境vs)


1.先按ctrl + k,再按ctrl + c

2.采用if(0)注释  --  不推荐


同时我们还可以从上面得出一个结论:非0为真,0为假


if语句执行的过程


#include

int main()

{

   int flag = 1;

   if (flag == 1)

       printf("hello world\n");

   return 0;

}


#include

int isEmpty()

{

   printf("某种数据结构是否为空!\n");

   return 1;

}

int main()

{

   if ((isEmpty()) == 1)

       printf("yes\n");

   return 0;

}


1.先执行()中的表达式或者函数,得到真假结果

2.条件  判定功能

3.进行  分支功能


逻辑与&&   逻辑或||   运算关系的顺序



总结:从左到右。


else的匹配原则


我们来看看下面的代码运行结果是啥?


相信我们很多人看到这里,由于x等于0,而不等于10,所以来到else打印hello yesterday!但其结果其实是什么也不打印,这里是因为else是与离他最近的if匹配的,由于x不等于10,所以里面的if-else语句没有执行,所以也就不会打印啦。我们来验证一下,在与if(x==0)后面加一个与之匹配的else语句。


总结:以后写if_else时,建议带上{ },这样不仅不容易出粗,而且代码的可观性也比较好。


再来看一个代码

#include

int main()

{

   int flag = 0;

   if (flag == 1);

   {

       printf("why you can see me?\n");

   }

   return 0;

}


C语言有没有布尔类型


bool 类型只有两个值:true 和 false。上面我们写的if()语句中非0为真,0为假,是因为C语言没有提供bool类型,而且我们也知道if()只有是条件表达式为真我们才执行,所以我们一般都写if(1),而不写if(true)。


当我们写if(true)或者定义bool类型的变量时,编译器也提示出来为定义的标识符,说明编译器不认识它们,证明C没有提供bool类型。


C99标准



 但其实C语言时是有bool类型的,只不过我们编译器目前采用的是C89 or C90的标准,而在C99中引入了_Bool类型,它是一个类型,不过在新增头文件stdbool.h中,被重新用宏写成了bool,为了保证C/C++兼容性。引入头文件stdbool.h,程序就没有错误了。


sizeof(bool)的值为多少?


   在 C 语言标准中,bool 类型是由 stdbool.h 头文件引入的。bool 通常被定义为枚举类型,其中 false 的值为 0,true 的值为 1。因此,sizeof(bool) 的值在 C 语言标准中并没有规定。 一般情况下,sizeof(bool) 的大小应该是 1 字节,因为 bool 类型只需要存储一个二进制位(0 或 1)来表示 true 或 false。但是,具体的实现方式可能会因编译器和操作系统的不同而有所不同。


_Bool原码



BOOL、TRUE、FALSE


#include<stdio.h>
#include<windows.h>
int main()
{
    BOOL x = TRUE;
    x = FALSE;
}


这里的BOOL实际上是一个重命名  -   typedef int BOOL; 这里我们可以证明一下


sizeof(BOOL)的值为多少?



BOOL与bool的区别


我将BOOL转到定义后,发现开头有这么一串注释,这样他们的区别就很明显了。


由上面的图片可以得到,BOOL是微软帮我们设计的,我们只能在微软的对应的开发工具才能使用BOOL,BOOL是微软的标准(不推荐,可移植性较差),而bool是通用的。


总结:


1.优先使用C90,就是我们之前用的非0为真,0为假。

2.一定要使用bool类型,优先使用bool,不推荐BOOL(可移植性较差)。


learn_C_deep_6 (布尔类型、布尔与“零值“、浮点型与“零值“、指针与“零值“的比较)(下):https://developer.aliyun.com/article/1424517

相关文章
|
3天前
|
C语言 C++
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
|
15天前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
2月前
|
存储 安全 Go
深入理解 Go 语言中的指针类型
【8月更文挑战第31天】
17 0
|
4月前
|
编译器 C++
函数指针和函数对象不是同一类型怎么替换
函数指针和函数对象不是同一类型,为何可替换用作同一函数的参数
|
4月前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
41 0
|
4月前
|
图形学 Windows
程序技术好文:记录类型指针
程序技术好文:记录类型指针
19 0
|
4月前
|
JSON Go 数据格式
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】(4)
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】
|
4月前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
1月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
2月前
|
C语言
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)