《C和指针》(Kenneth Reek)精读——第四章:语句

2024-03-30 22:52

本文主要是介绍《C和指针》(Kenneth Reek)精读——第四章:语句,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第四章:语句

  • 4.1 空语句
  • 4.2 表达式语句
  • 4.3 代码块
  • 4.4 if 语句
  • 4.5 while 语句
    • 4.5.1 break和continue
  • 4.6 for语句
  • 4.7 do 语句
  • 4.8 switch 语句
    • 4.8.1 switch 中的break
    • 4.8.2 switch 中的default
  • 4.9 goto语句

4.1 空语句


空语句通常由一个分号(;)表示,不执行任何操作

; // 这是一个空语句

4.2 表达式语句


表达式后面加上一个分号,就可以把表达式转变为语句

x = y + 3;
ch = getchar();

4.3 代码块


4.4 if 语句


//if语法
if(expression){statement
}
else{statement
}

在C的if语句和其他语言的if语句中,只存在一个差别。C并不具备布尔类型,而是用整型来代替。0为假,非0为真。

悬空else问题:else和谁匹配问题。在Python中,由于依赖缩进来定义代码块,因此通常不会出现悬空else问题。但是,在其他语言(如C、C++、Java等)中,如果不正确地使用花括号,就可能出现这个问题。

if (condition1)if (condition2)statement1;
elsestatement2;

在这个例子中,else与哪个if匹配是不明确的。根据语言的语法规则,else将与最近的未匹配的if语句匹配,即if (condition2)。为了避免这种问题,应该始终确保使用花括号来明确界定代码块,尤其是在嵌套的if-else语句中。上述代码应该这样写:

if (condition1) {if (condition2) {statement1;} else {statement2;}
}

在这个修改后的版本中,else明确地与if (condition2)匹配,使得代码的逻辑更加清晰。

4.5 while 语句

//while语法
while (expr) {  // 要重复执行的代码块  
}

4.5.1 break和continue


  • while循环中可以使用break 语句,用于永久终止循环。
  • while循环中也可以使用continue 语句,它用于永久终止当前的那次循环。
    在这里插入图片描述

4.6 for语句


//for语法
for(expression1; expression2 ; expression3 ){statement;
}

for语句的执行过程几乎和下面的while 语句一模一样:

expression1 ;
while ( expression2 ) {statement;expression3 ;
}

当然forwhile两者也有差异,差异表现在 continue 语句
在这里插入图片描述

在这里插入图片描述

for 循环中,通常有一个初始化部分、一个条件检查部分、一个循环体和一个调整(或迭代)部分。这些部分在 for 语句的声明中就已经定义好了。当在循环体内遇到 continue 语句时,程序会跳过当前迭代剩余的代码,并直接跳到调整部分,然后开始下一次迭代的条件检查。

for (int i = 0; i < 10; i++) {if (i == 5) {continue; // 当 i 等于 5 时,跳过当前迭代剩余的部分}// 循环体的其余部分printf("%d\n", i);
}

在这个例子中,当 i 等于 5 时,continue 语句会跳过 printf 调用,然后 i 会递增(这是 for 循环的调整部分),接着检查 i < 10 是否为真,以决定是否开始下一次迭代。

而在 while 循环中,循环体通常是一个代码块,它包含了需要检查的条件和所有需要执行的语句。没有像 for 循环那样的显式调整部分;循环的迭代通常通过在循环体内部修改条件变量来实现。因此,当在 while 循环的循环体内部遇到 continue 语句时,它会跳过当前迭代剩余的代码,并立即回到 while 语句的条件检查。如果条件仍然为真,循环将重新开始;如果条件为假,循环将终止。

int i = 0;
while (i < 10) {if (i == 5) {continue; // 当 i 等于 5 时,跳过当前迭代剩余的部分}// 循环体的其余部分i++; // 这可以看作是调整部分,但在 while 循环中它是循环体的一部分printf("%d\n", i);
}

4.7 do 语句


do{
statement;
}while (expression);

do-while至少执行一次
在这里插入图片描述

4.8 switch 语句

switch (expression) {  case constant-expression1:  // 代码块1  break;  case constant-expression2:  // 代码块2  break;  // 可以有更多的 case 语句  default:  // 默认执行的代码块  break;  
}
  • constant-expression1:常量整型值表达式,不能是变量

4.8.1 switch 中的break


switch语句的执行过程。首先是计算 expression 的值,然后执行流转到语句列表中其case标签值与expression的值匹配的语句。从这条语句起,直到语句列表的结束也就是switch语句的底部,它们之间所有的语句均被执行。
在这里插入图片描述
如果遇到break就直接执行到switch底部

4.8.2 switch 中的default


default写在任何一个case标签可以出现的位置。当switch 表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。但是,它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句。

4.9 goto语句


不建议使用goto语句

这篇关于《C和指针》(Kenneth Reek)精读——第四章:语句的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/862800

相关文章

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非

BERT 论文逐段精读【论文精读】

BERT: 近 3 年 NLP 最火 CV: 大数据集上的训练好的 NN 模型,提升 CV 任务的性能 —— ImageNet 的 CNN 模型 NLP: BERT 简化了 NLP 任务的训练,提升了 NLP 任务的性能 BERT 如何站在巨人的肩膀上的?使用了哪些 NLP 已有的技术和思想?哪些是 BERT 的创新? 1标题 + 作者 BERT: Pre-trainin

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

C和指针:字符串

字符串、字符和字节 字符串基础 字符串就是一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾。 字符串长度就是字符串中字符数。 size_t strlen( char const *string ); string为指针常量(const修饰string),指向的string是常量不能修改。size_t是无符号数,定义在stddef.h。 #include <stddef.h>

【Python知识宝库】上下文管理器与with语句:资源管理的优雅方式

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、什么是上下文管理器?二、上下文管理器的实现三、使用内置上下文管理器四、使用`contextlib`模块五、总结 前言 在Python编程中,资源管理是一个重要的主题,尤其是在处理文件、网络连接和数据库

【C++】作用域指针、智能指针、共享指针、弱指针

十、智能指针、共享指针 从上篇文章 【C++】如何用C++创建对象,理解作用域、堆栈、内存分配-CSDN博客 中我们知道,你的对象是创建在栈上还是在堆上,最大的区别就是对象的作用域不一样。所以在C++中,一旦程序进入另外一个作用域,那其他作用域的对象就自动销毁了。这种机制有好有坏。我们可以利用这个机制,比如可以自动化我们的代码,像智能指针、作用域锁(scoped_lock)等都是利用了这种机制。

MFC中App,Doc,MainFrame,View各指针的互相获取

纸上得来终觉浅,为了熟悉获取方法,我建了个SDI。 首先说明这四个类的执行顺序是App->Doc->Main->View 另外添加CDialog类获得各个指针的方法。 多文档的获取有点小区别,有时间也总结一下。 //  App void CSDIApp::OnApp() {      //  App      //  Doc     CDocument *pD

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

C和指针:结构体(struct)和联合(union)

结构体和联合 结构体 结构体包含一些数据成员,每个成员可能具有不同的类型。 数组的元素长度相同,可以通过下标访问(转换为指针)。但是结构体的成员可能长度不同,所以不能用下标来访问它们。成员有自己的名字,可以通过名字访问成员。 结构声明 在声明结构时,必须列出它包含的所有成员。 struct tag {member-list} variable-list ; 定义一个结构体变量x(包含