《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

相关文章

Mysql常见的SQL语句格式及实用技巧

《Mysql常见的SQL语句格式及实用技巧》本文系统梳理MySQL常见SQL语句格式,涵盖数据库与表的创建、删除、修改、查询操作,以及记录增删改查和多表关联等高级查询,同时提供索引优化、事务处理、临时... 目录一、常用语法汇总二、示例1.数据库操作2.表操作3.记录操作 4.高级查询三、实用技巧一、常用语

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

SQL BETWEEN 语句的基本用法详解

《SQLBETWEEN语句的基本用法详解》SQLBETWEEN语句是一个用于在SQL查询中指定查询条件的重要工具,它允许用户指定一个范围,用于筛选符合特定条件的记录,本文将详细介绍BETWEEN语... 目录概述BETWEEN 语句的基本用法BETWEEN 语句的示例示例 1:查询年龄在 20 到 30 岁

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

Mybatis Plus JSqlParser解析sql语句及JSqlParser安装步骤

《MybatisPlusJSqlParser解析sql语句及JSqlParser安装步骤》JSqlParser是一个用于解析SQL语句的Java库,它可以将SQL语句解析为一个Java对象树,允许... 目录【一】jsqlParser 是什么【二】JSqlParser 的安装步骤【三】使用场景【1】sql语

sql语句字段截取方法

《sql语句字段截取方法》在MySQL中,使用SUBSTRING函数可以实现字段截取,下面给大家分享sql语句字段截取方法,感兴趣的朋友一起看看吧... 目录sql语句字段截取sql 截取表中指定字段sql语句字段截取1、在mysql中,使用SUBSTRING函数可以实现字段截取。例如,要截取一个字符串字

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL