当前位置: 首页 > article >正文

C 学习(5)

哈哈哈哈哈,终于想起来了!贴一下主要的参考:

基本语法 - 《阮一峰《C 语言教程》》 - 书栈网 · BookStack

内容写的比较浅显有疏漏,如果看不明白,再结合一下百度。

注释

C 语言的注释有两种表示方法。

第一种方法是将注释放在/*...*/之间,可以一行,也可以在内部分行。

/* 注释一行 */


/*
  注释分行
*/

灵活的运用方式----------在文件头部进行文件的版权或者功能解说:

/*****************************************\
|* Copyright (c) 2024 by 777             *|
|* All Rights Reserved.                  *|
|*                                       *|
\*****************************************/

第二种写法是将注释放在双斜杠//后面,从双斜杠到行尾都属于注释。这种注释只能是单行,可以放在行首,也可以放在一行语句的结尾。

可以放在代码块的上一行进行代码作用的解释,或者临时注释掉不用的代码行,进行后续debug .

     if (0 == r && 0 == b)

C 语言中 进行比较的表达式,称为“关系表达式”,里面使用的运算符就称为“关系运算符”,主要有下面6个。

  1. > 大于运算符  a > b;
  2. < 小于运算符  a < b;
  3. >= 大于等于运算符  a >= b;
  4. <= 小于等于运算符  a <= b;
  5. == 相等运算符  a == b;
  6. != 不相等运算符  a != b;

关系表达式通常返回01,表示真伪。

C 语言中,0表示伪,所有非零值表示真。比如,20 > 12返回112 > 20返回0

关系表达式常用于ifwhile结构。比如:

  1. if (x == 3) {
  2. printf("x is 3.\n");
  3. }

注意,相等运算符 == 与赋值运算符 是两个不一样的运算符。如果不小心写出下面的代码,它可以运行,但很容易出现意料之外的结果。

  1. if (x = 3) ...

上面示例中,原意是x == 3,但是不小心写成x = 3。这个式子表示对变量x赋值3,它的返回值为3,所以if判断总是为真。

为了防止出现这种错误,有的程序员喜欢将变量写在等号的右边。

  1. if (3 == x) ...

这样的话,如果把==误写成=,编译器就会报错。

  1. /* 报错 */
  2. if (3 = x) ...

switch

     switch 语句用于判断条件有多个结果的情况。

  1. switch (expression) {
  2. case value1: statement
  3. case value2: statement
  4. default: statement
  5. }

上面代码中,根据表达式data->bitwidth不同的值,执行相应的case分支。如果找不到对应的值,就执行default分支。

每个case语句体的结尾,都应该有一个break语句,作用是跳出整个switch结构,不再往下执行。如果缺少break,就会导致继续执行下一个casedefault分支。

  1. switch (grade) {
  2. case 0:
  3. printf("False");
  4. case 1:
  5. printf("True");
  6. break;
  7. default:
  8. printf("Illegal");
  9. }

上面示例中,case 0的部分没有break语句,导致这个分支执行完以后,不会跳出switch结构,继续执行case 1分支。

利用这个特点,如果多个case分支对应同样的执行语句体,可以写成下面这样。

  1. switch (grade) {
  2. case 0:
  3. case 1:
  4. printf("True");
  5. break;
  6. default:
  7. printf("Illegal");
  8. }

上面示例中,case 0分支没有任何语句,导致case 0case 1都会执行同样的语句体。

case后面的语句体,如果比较复杂,建议(但不必须)放在大括号里面。这也是为什么需要break跳出switch的原因

default 分支是可选的,用来处理前面的 case 都不匹配的情况,最好放在所有 case 的后面。如果没有该分支,遇到所有的 case 都不匹配的情况,就会直接跳出整个 switch 代码块。

while 和 do ... while

实际中用的少,更多用的是  for 循环 ,比如 for (uint8_t i = 10; i < 40; i++)

while语句用于循环结构,满足条件时,不断执行循环体。

  1. while (expression)
  2. statement

do...while结构是while的变体,它会先执行一次循环体,然后再判断是否满足条件。如果满足的话,就继续执行循环体,否则跳出循环。

  1. do statement
  2. while (expression);

continue 语句

continue 关键字在 C 语言中用于跳过当前循环中的剩余代码,并立即开始下一次迭代。

 

详细可以参考:【C语言】continue 关键字详解_c语言continue-CSDN博客

char

C 语言中基本数据类型有三种:字符(char)、整数(int)和浮点数(float)

  1. char c = 'B';

上面示例声明了变量c是字符类型,并将其赋值为字母B。字符常量必须放在单引号 ''里面。

字符数组
  字符数组是一个可以存储多个字符的连续内存区域。这些字符可以是文本字符串的一部分,或者用于其他目的。字符数组在声明时指定了大小(即可以存储的字符数),并在栈上分配内存。

示例:

  1. char str[10];                   // 声明一个可以存储最多9个字符和1个空字符('\0')的字符数组
  2. strcpy(str, "Hello");        // 使用strcpy函数将字符串"Hello"复制到str数组中

在上面的示例中,str是一个字符数组,它可以存储最多10个字符。我们使用strcpy函数将一个字符串复制到这个数组中。

声明时,如果预先知道字符数组的长度,那么可以在声明时将长度值写在中括号中;如果声明时并不知道该字符数组的数据长度,那么则可用不预先声明字符数组长度,即将中括号置空。

字符数组变量的赋值形式也有两种:

  1. 用花括号扩起来的字符数组赋值,必须注意用结束符\0作为字符数组的最后一个字符

  2. 使用双引号扩起来的字符串赋值。

char arr[]  = "abc";

char arr2 [4] = {'a', 'b', 'c', '\0' };

char arr[3][10] = {"hello", "world", "c"};

float minD = 65535.0f;

将整数65535赋值给浮点变量minD.

浮点型是基本数据类型之一,用于定义实数(小数)变量。

float(单精度浮点数)类型占用4个字节(32位),其中8位存放指数的值和符号,剩下24位存放小数的值和符号。float类型至少能够提供(十进制的)6位有效数字,指数部分的范围为(十进制的)-3737,即数值范围为10^{-37}10^{37}

有时候,32位浮点数提供的精度或者数值范围还不够,C 语言又提供了另外两种更大的浮点数类型。

  • double:占用8个字节(64位),至少提供13位有效数字。-----(双精度浮点数)
  • long double:通常占用16个字节。

举例:

float f = 1.23f; // 定义单精度浮点型变量f,值为1.23,

double d = 1.23; // 定义双精度浮点型变量d,值为1.23,

解释:在C语言中浮点数常量模式是 double类型的。如果需要直接使用float 型的浮点数,需要在常数后面加后缀f。

如果是声明变量,则在赋值时不必要加f 后缀。

bool值,true or false

头文件stdbool.h定义了另一个类型别名bool,并且定义了true代表1false代表0。只要加载这个头文件,就可以使用这几个关键字。

  1. #include <stdbool.h>
  2. bool flag = false;

http://www.kler.cn/a/381927.html

相关文章:

  • 全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(实战训练三)
  • React第十八节 useEffect 用法使用技巧注意事项详解
  • 低空经济的地理信息支撑:构建安全、高效的飞行管理体系
  • GitPuk安装配置指南
  • 谷歌浏览器的网络连接问题解决方案
  • Xcode 16 编译弹窗问题、编译通过无法,编译通过打包等问题汇总
  • VMware虚拟机可以被外部机器访问吗?
  • D59【python 接口自动化学习】- python基础之异常
  • 硬件基础06 滤波器——无源、有源(含Filter Solutions、Filter Pro、MATLAB Fdatool)
  • spring—boot(整合redis)
  • CSS【二】与盒子模型
  • zabbix 7.0 安装(服务器、前端、代理等)
  • 了解数据库的ACID特性
  • CI/CD 的概念
  • 大华乐橙设备私有平台EasyCVR视频设备轨迹回放平台支持哪些摄像机?摄像机如何选型?
  • flink实战-- flink任务的火焰图如何使用
  • IT设备告警预测:运维团队的新导向
  • MySQL45讲 第十三讲 为什么表数据删掉一半,表文件大小不变?
  • Scala入门基础(16)scala的包
  • CSP/信奥赛C++刷题训练:经典广搜例题(1):洛谷P1443 :马的遍历
  • CISAW-PIS——个人信息安全
  • 数字后端零基础入门系列 | Innovus零基础LAB学习Day9
  • 理解 WordPress | 第二篇:结构化分析
  • 山东路远生态科技有限公司竣工投产仪式暨产品发布会圆满举行
  • C#-类:索引器
  • 论文阅读笔记:Activating More Pixels in Image Super-Resolution Transformer