首页 > 其他分享 >C语言进阶——一文带你深度了解“C语言关键字”(中篇3)

C语言进阶——一文带你深度了解“C语言关键字”(中篇3)

时间:2024-08-08 23:24:41浏览次数:17  
标签:中篇 进阶 bTestFlag C语言 写法 0.0 else 零值 变量

这篇文章记录我学习C语言关键字的相关知识,旨在记录一些进阶的知识。

目录

一、if、else之间的组合

(一)、bool变量与零值之间的比较

(二)、float变量与零值之间的比较 

(三)、指针变量与零值之间的比较 

(四)、else究竟与哪个if进行配对呢?

二、结语 


一、if、else之间的组合

(一)、bool变量与零值之间的比较

看到这个标题的时候,想必你一定会说“bool变量与零值之间的比较语句如何使用if语句来写?”,好家伙,接着往下看……

bool bTestFlag = FALSE;//想想为什么一般初始化为 FALSE 比较好?
A), if(bTestFlag == 0); if(bTestFlag == 1);
B), if(bTestFlag == TRUE); if(bTestFlag == FLASE);
C), if(bTestFlag); if(!bTestFlag);
上面的书写方式哪一项是正确的呢?让我们来一起分析一下吧。
A)写法: bTestFlag 是什么?整型变量?如果要不是这个名字遵照了前面的命名规范,肯怕很容易让人误会成整型变量。所以这种写法不好。
B)写法: FLASE 的值大家都知道,在编译器里被定义为 0; 但 TRUE 的值呢?都是 1吗?很不幸,不都是 1。 Visual C++定义为 1,而它的同胞兄弟 Visual Basic 就把 TRUE 定义
为-1.那很显然,这种写法也不好。
C)写法:大家都知道 if 语句是靠其后面的括号里的表达式的值来进行分支跳转的。表达式如果为真,则执行 if 语句后面紧跟的代码;否则不执行。那显然,本组的写法很好,既不会引起误会,也不会由于 TRUE 或 FLASE 的不同定义值而出错。记住:以后写代码就得这样写。

(二)、float变量与零值之间的比较 

同理,我们按照以上的方式进行书写比较,再队不同的方式进行分析。

float fTestVal = 0.0;
A), if(fTestVal == 0.0); if(fTestVal != 0.0);
B), if((fTestVal >= -EPSINON) && (fTestVal <= EPSINON)); //EPSINON 为定义好的
精度。

哪一组或是那些组正确呢?我们来分析分析:
float 和 double 类型的数据都是有精度限制的,这样直接拿来与 0.0 比,能正确吗?明显不能,看例子: 圆周率的值四舍五入精确到小数点后 10 位为: 3.1415926536,你拿它减去0.00000000001 然后再四舍五入得到的结果是多少?你能说前后两个值一样吗?


EPSINON 为定义好的精度,如果一个数落在[0.0-EPSINON,0.0+EPSINON] 这个闭区间内,我们认为在某个精度内它的值与零值相等;否则不相等。扩展一下,把 0.0 替换为你想比较的任何一个浮点数,那我们就可以比较任意两个浮点数的大小了,当然是在某个精度内。同样的也不要在很大的浮点数和很小的浮点数之间进行运算,比如:
10000000000.00 + 0.00000000001
这样计算后的结果可能会让你大吃一惊。

(三)、指针变量与零值之间的比较 

int * p = NULL;//定义指针一定要同时初始化,指针与数组那章会详细讲解。
A), if(p == 0); if(p != 0);
B), if(p); if(!p);
C) , if(NULL == p); if(NULL != p);

哪一组或是那些组正确呢?我们来分析分析:
A)写法: p 是整型变量?容易引起误会,不好。尽管 NULL 的值和 0 一样,但意义不同。
B)写法: p 是 bool 型变量?容易引起误会,不好。
C)写法:这个写法才是正确的,但样子比较古怪。为什么要这么写呢?是怕漏写一个
“=”号:if(p = NULL),这个表达式编译器当然会认为是正确的,但却不是你要表达的意思。
所以,非常推荐这种写法。

这些写法的主要区别在于语义和安全性:

  • A) 中的写法容易出错,因为有可能忘记去掉多余的分号,而且对于初学者来说,直接比较 p 和 NULL 也不是最佳实践。
  • B) 中的写法是最常见的方式,使用 if (p) 和 if (!p) 来检查指针是否为空。
  • C) 中的写法更加安全,特别是在比较常量和变量时,将常量放在左边可以避免一些潜在的错误。

(四)、else究竟与哪个if进行配对呢?

if(0 == x)
if(0 == y) error();
else{
//program code
}

这个 else 到底与谁匹配呢?让人迷糊,尤其是初学者。还好, C 语言有这样的规定: else
始终与同一括号内最近的未匹配的 if 语句结合。虽然老手可以区分出来,但这样的代码谁都会头疼的,任何时候都别偷这种懒。关于程序中的分界符‘{’和‘}’ ,建议如下: 

二、结语 

关于本次“C语言关键字”进阶的知识就分享到此了,希望的分享对你有所帮助!

标签:中篇,进阶,bTestFlag,C语言,写法,0.0,else,零值,变量
From: https://blog.csdn.net/m0_73931287/article/details/141020149

相关文章

  • C语言学习笔记 Day8(函数)
    Day8 内容梳理:目录Chapter6 函数6.0概述6.1 定义函数6.2 调用函数(1)实参&形参(2)调用无参函数(3)调用有参函数6.3 声明函数6.4 终止函数(exit&return)6.5多文件编程(1)设置主文件(2)创建头文件(3)导入头文件Chapter6 函数6.0概述函数的分类(2种):   ......
  • 嵌入式初学-C语言-十八
    #接嵌入式初学-C语言-十七#变量的生命周期1.概念:变量在程序运行中存在的时间2.根据变量存在的时间不同,变量可分为静态存储和动态存储 3. 变量的存储类型变量的完整定义格式:[存储类型]数据类型变量列表;  4.存储类型auto:存储类型只能修饰局部变量,被修饰的局......
  • 新手的第一个c语言小程序
    作为一个C语言的新手,我深知要想精通这门语言,就必须通过不断的练习来积累经验。因此,我决定从解决高中数学问题入手,编写我的第一个C语言小程序。显然,高中的许多数学问题复杂难解,对于我这个初学者来说,理解答案本身就已经是一项挑战,更不用说用程序来求解了。所以,我选择了数列求和这一......
  • C语言学习
    学习内容一维数组,二维数组创建,初始化,数组名代码笔记#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>//一维数组//数组的创建//数组:相同元素类型的集合//数组的创建方式//typt_t  arr_name [const_n];//元素类型       常量表达式,用来指......
  • C语言--函数
    函数的概述:函数:实现一定功能的,独立的代码模块。函数一定是先定义,后使用使用函数的优势:·我们可以通过函数提供功能给别人使用,也可以使用别人提供的函数,减少代码量               ·借助函数可以减少重复的代码               ·实现结构化(......
  • C语言数组练习
    数组作业一维数组练习题题目1键盘录入一组数列,利用冒泡排序将数据由大到小排序#include<stdio.h>intmain(){ intt[100],num,tmp; printf("请输入数字个数:"); scanf("%d",&num); printf("请输入%d个数字:\n",num); for(inti=0;i<num;i++){ sc......
  • 鹏哥C语言自定义笔记重点
    1.浮点数在内存中不能精确保存。2.sizeof这个操作符计算返回的结果是size_t类型的,是无符号整数型的,当遇见负数会被认为是非常大的数。3.strcpy在拷贝字符串时,会把源字符串中的\0也拷贝过去。assert是断言,可以防止NULL,需要头文件#include<assert.h>。const修饰指针变量放在*......
  • JavaWeb-01(Java进阶内容详解,Html、CSS、JS)
    一、前端技术结构分析网页的结构(HTML)、表现(CSS)、行为(JS)1.HTML定义界面整体结构2.CSS定义页面样式3.JS实现动态效果二、HTML2.1安装VSCode及前端开发插件Chinese(Simplified)(简体中文)LanguagePackforVisualStudioCodeCodeSpellChecker检查单......
  • C语言入门零基础:5、进制数和进制转换
    前提:printf语句和scanf语句是源自与stdio.h这个头文件中的函数,它们的作用分别是输出和输入。应用:    printf("helloworld\n");  //用于输出(打印)hellowolrd这个语句。    inta;    scanf("%d",&a);   //用于向a空间输入一个整形数据......
  • c语言中输出字符指针相关问题
    原文链接:https://blog.csdn.net/littesss/article/details/71037908c语言中输出字符指针相关问题一、例如定义一个char*p="hello";的字符指针。首先搞清楚在c语言中没有字符串的类型,所以对字符串操作,有两种形式:可以用字符指针(为什么不叫字符串指针,我个人觉得,字符指针针对......