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

C语言复习概要(一)

在这里插入图片描述

本文

      • C语言入门详解:从基础概念到分支与循环
        • 1. C语言常见概念
          • 1.1 程序的基本结构
          • 1.2 变量作用域和存储类
          • 1.3 输入输出
          • 1.4 编译与运行
        • 2. C语言中的数据类型和变量
          • 2.1 基本数据类型
          • 2.2 变量的声明与初始化
          • 2.3 常量与枚举
        • 3. C语言的分支结构
          • 3.1 if语句
          • 3.2 if-else语句
          • 3.3 嵌套if语句
          • 3.4 switch语句
          • 4.2 while循环
          • 4.3 do-while循环
          • 4.4 循环的控制语句
        • 5. 分支与循环的综合应用
          • 5.1 简单的计算器示例
          • 5.2 查找数组中的最大值
      • 总结

C语言入门详解:从基础概念到分支与循环

C语言作为现代编程语言的鼻祖之一,在系统编程、嵌入式开发、操作系统内核等领域占据了极其重要的位置。C语言以其简洁、高效、可移植性等特点,成为了很多其他高级语言(如C++、Java、Python)的基础。本文将深入探讨C语言的常见概念、变量和数据类型、分支结构以及循环结构,帮助初学者更好地掌握这门经典编程语言。


1. C语言常见概念

在学习任何编程语言之前,理解其核心概念至关重要。C语言的程序结构、函数、变量作用域、输入输出、编译运行等内容构成了其基本框架。

1.1 程序的基本结构

C语言的程序是由函数和语句组成的模块化代码集合,每个C语言程序至少有一个主函数,即main()函数。程序从main()函数开始执行,当程序结束时返回一个整数值,通常是0,表示程序成功运行。

基本结构

#include <stdio.h>  // 标准输入输出头文件int main() {// 主函数体printf("Hello, World!\n");return 0;
}
  • #include <stdio.h>:这是一个预处理指令,用于引入标准输入输出库,该库包含printf()scanf()等常用函数。
  • int main():这是程序的主函数,程序的执行从这里开始。返回类型int表明函数返回整数值。
  • printf():这是一个输出函数,能够将字符串或变量值输出到控制台。
1.2 变量作用域和存储类

在C语言中,变量的作用域决定了它的可见性和生命周期,通常分为局部变量全局变量。局部变量只能在其声明的代码块内访问,而全局变量可以在整个程序中访问。

  • 局部变量:在函数或代码块内定义,函数执行结束时,局部变量被销毁。
  • 全局变量:在所有函数外部定义,可以在整个程序中访问。

存储类描述了变量的生命周期、初始值和存储方式,主要有以下几种:

  • auto:默认的局部变量存储类。
  • extern:用于声明一个全局变量或函数在其他文件中定义。
  • static:用于局部变量时,其值在函数结束后不会被销毁,用于全局变量时,其作用域限制在当前文件中。
  • register:提示编译器将变量存储在CPU寄存器中,以提高访问速度。

示例

#include <stdio.h>int globalVar = 10;  // 全局变量void func() {int localVar = 5;  // 局部变量printf("Local variable: %d\n", localVar);
}int main() {func();printf("Global variable: %d\n", globalVar);return 0;
}

在这个示例中,globalVar是一个全局变量,localVar是局部变量。全局变量的值可以在程序的不同部分访问,而局部变量只能在函数func()中使用。

1.3 输入输出

C语言提供了丰富的输入输出功能。printf()用于向屏幕输出数据,scanf()用于从用户获取输入。

  • printf():格式化输出,用法类似于打印字符串或变量。
  • scanf():用于获取用户的输入,按格式指定的变量存储输入值。

代码示例

#include <stdio.h>int main() {int age;printf("Enter your age: ");scanf("%d", &age);printf("Your age is: %d\n", age);return 0;
}

程序会提示用户输入年龄,然后通过scanf()将用户的输入值存储在变量age中,并使用printf()输出。

1.4 编译与运行

C语言是编译型语言,这意味着源代码需要通过编译器翻译成机器代码才能在计算机上执行。常见的C语言编译器有GCC(GNU Compiler Collection)、Clang、MSVC等。

编译流程

  1. 编写源代码并保存为.c文件。
  2. 使用编译器进行编译,如gcc命令:gcc program.c -o program
  3. 生成可执行文件,运行该文件:./program

2. C语言中的数据类型和变量

C语言的数据类型定义了变量可以存储的值的类型和范围。每种数据类型都有特定的存储需求和表示方式。

2.1 基本数据类型

C语言中的数据类型分为以下几类:

  • 整型int):用于存储整数。常见的整型有intshortlong,可以通过unsigned修饰符表示无符号整型。
  • 字符型char):用于存储单个字符,占用1个字节。
  • 浮点型float):用于存储小数,占用4个字节,精度较低。
  • 双精度浮点型double):精度高于float,占用8个字节。
  • 布尔型:虽然C语言没有专门的布尔类型,但我们通常使用整型,0表示false,非零值表示true

数据类型表

数据类型存储大小取值范围
char1字节-128 到 127 或 0 到 255
int2或4字节-32,768 到 32,767 或 -2^31 到 2^31-1
float4字节1.2E-38 到 3.4E+38
double8字节2.3E-308 到 1.7E+308
short2字节-32,768 到 32,767
long8字节-2^63 到 2^63-1
2.2 变量的声明与初始化

在C语言中,变量在使用之前必须先声明。声明变量时需要指定其类型,且可以在声明的同时为其赋初值。

  • 变量声明:告诉编译器该变量的类型和名称。
  • 变量初始化:为变量赋初值,防止未初始化变量的使用可能导致程序行为异常。

示例

#include <stdio.h>int main() {int age = 25;  // 声明并初始化变量float weight = 70.5;char grade = 'A';printf("Age: %d, Weight: %.1f, Grade: %c\n", age, weight, grade);return 0;
}

这里我们定义了整型、浮点型和字符型变量,并进行了初始化。

2.3 常量与枚举

在C语言中,常量的值在程序执行过程中是不可更改的,使用const关键字定义常量。枚举(enum)是一种用户定义的数据类型,用于表示一组相关的常量。

常量示例

#include <stdio.h>int main() {const int DAYS_IN_WEEK = 7;printf("There are %d days in a week.\n", DAYS_IN_WEEK);return 0;
}

枚举示例

#include <stdio.h>enum Weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};int main() {enum Weekday today;today = Wednesday;printf("Today is day %d of the week.\n", today);  // 输出3return 0;
}

在上述程序中,枚举类型Weekday定义了7个常量,分别代表一周中的天数。


3. C语言的分支结构

分支结构使得程序可以根据条件执行不同的代码路径。在C语言中,常见的分支结构包括if语句、if-else语句、嵌套if语句和switch语句。

3.1 if语句

if语句是最基本的分支结构,它根据条件表达式的真假来决定是否执行某段代码。

语法

if (条件) {// 如果条件为真,执行这段代码
}

示例

#include <stdio.hint main() {int number = 10;if (number > 0) {printf("The number is positive.\n");}return 0;
}

在这个示例中,程序根据number的值决定是否输出正数。

3.2 if-else语句

if-else语句在条件为假时执行另一个代码块。

语法

if (条件) {// 如果条件为真,执行这段代码
} else {// 如果条件为假,执行这段代码
}

示例

#include <stdio.h>int main() {int number = -5;if (number >= 0) {printf("The number is non-negative.\n");} else {printf("The number is negative.\n");}return 0;
}

这个程序根据number的值判断它是非负数还是负数。

3.3 嵌套if语句

当多个条件需要嵌套判断时,可以使用嵌套if语句。它可以有效地处理复杂的条件。

示例

#include <stdio.h>int main() {int number = 0;if (number > 0) {printf("The number is positive.\n");} else if (number < 0) {printf("The number is negative.\n");} else {printf("The number is zero.\n");}return 0;
}

这里,程序根据number的值进行三重判断,并输出相应的信息。

3.4 switch语句

switch语句适合用于多个可能的值来控制执行路径。相比多个if-else语句,switch结构更具可读性。

语法

switch (变量或表达式) {case1:// 当变量等于值1时执行break;case2:// 当变量等于值2时执行break;default:// 默认执行
}

示例

#include <stdio.h>int main() {int day = 3;switch (day) {case 1:printf("Monday\n");break;case 2:printf("Tuesday\n");break;case 3:printf("Wednesday\n");break;case 4:printf("Thursday\n");break;case 5:printf("Friday\n");break;case 6:printf("Saturday\n");break;case 7:printf("Sunday\n");break;default:printf("Invalid day\n");}return 0;
}在这个例子中,根据变量`day`的值,`switch`语句会打印对应的星期几。如果值不在17之间,默认会打印“Invalid day”。---#### 4. C语言中的循环结构循环是编程中的重要控制结构,用于重复执行一段代码。C语言中常见的循环结构有`for`循环、`while`循环和`do-while`循环。##### 4.1 for循环`for`循环用于在已知循环次数的情况下执行循环,它将初始化、条件判断和迭代操作结合在一起。**语法**:```c
for (初始化; 条件; 迭代) {// 循环体
}

示例

#include <stdio.h>int main() {for (int i = 0; i < 5; i++) {printf("i = %d\n", i);}return 0;
}

在这个例子中,for循环将变量i0增加到4,并在每次迭代中输出i的值。

4.2 while循环

while循环在条件为真时反复执行循环体,适合用于循环次数不确定的情况。

语法

while (条件) {// 循环体
}

示例

#include <stdio.h>int main() {int i = 0;while (i < 5) {printf("i = %d\n", i);i++;}return 0;
}

这个程序与for循环类似,但使用了while循环来逐步增加i的值。

4.3 do-while循环

do-while循环和while循环类似,但它至少会执行一次循环体,因为条件是在循环体执行之后才进行判断的。

语法

do {// 循环体
} while (条件);

示例

#include <stdio.h>int main() {int i = 0;do {printf("i = %d\n", i);i++;} while (i < 5);return 0;
}

即使初始值为i = 0do-while循环也会先执行循环体,然后再检查条件是否成立。

4.4 循环的控制语句

在C语言中,控制循环执行过程的语句包括breakcontinuegoto

  • break:用于立即终止循环,跳出当前循环体。
  • continue:跳过当前迭代的剩余部分,进入下一次迭代。
  • goto:一种直接跳转到程序中指定标签的语句,尽量避免使用,容易导致程序难以调试和理解。

示例:使用breakcontinue

#include <stdio.h>int main() {for (int i = 0; i < 10; i++) {if (i == 5) {break;  // 当i为5时,终止循环}if (i % 2 == 0) {continue;  // 跳过偶数}printf("i = %d\n", i);}return 0;
}

这个程序会输出奇数并在i等于5时终止循环。


5. 分支与循环的综合应用

在编写实际的C语言程序时,往往会结合使用分支结构和循环结构,以实现更复杂的逻辑处理。

5.1 简单的计算器示例

一个基本的计算器程序,可以根据用户的输入进行加法、减法、乘法和除法运算,结合了分支结构和循环结构。

示例

#include <stdio.h>int main() {char op;double num1, num2;while (1) {printf("Enter operator (+, -, *, /) or 'q' to quit: ");scanf(" %c", &op);if (op == 'q') {break;}printf("Enter two numbers: ");scanf("%lf %lf", &num1, &num2);switch (op) {case '+':printf("%.2lf + %.2lf = %.2lf\n", num1, num2, num1 + num2);break;case '-':printf("%.2lf - %.2lf = %.2lf\n", num1, num2, num1 - num2);break;case '*':printf("%.2lf * %.2lf = %.2lf\n", num1, num2, num1 * num2);break;case '/':if (num2 != 0) {printf("%.2lf / %.2lf = %.2lf\n", num1, num2, num1 / num2);} else {printf("Error! Division by zero.\n");}break;default:printf("Invalid operator.\n");}}return 0;
}

这个程序允许用户输入一个算术运算符和两个操作数,然后根据用户的选择进行运算,直到用户输入'q'退出程序。

5.2 查找数组中的最大值

结合分支结构和循环结构,我们还可以编写一个查找数组中最大值的程序。

示例

#include <stdio.h>int main() {int n, i, max;printf("Enter number of elements: ");scanf("%d", &n);int arr[n];printf("Enter %d integers: ", n);for (i = 0; i < n; i++) {scanf("%d", &arr[i]);}max = arr[0];  // 假设第一个元素为最大值for (i = 1; i < n; i++) {if (arr[i] > max) {max = arr[i];}}printf("The maximum value is: %d\n", max);return 0;
}

该程序通过for循环遍历数组中的每个元素,并使用if语句比较当前元素与最大值,最后输出数组中的最大值。


总结

本文详细介绍了C语言的常见概念、数据类型、变量的声明与初始化、分支结构以及循环结构,并通过多个代码示例展示了如何使用这些基本构件编写C语言程序。通过学习这些内容,初学者能够更好地理解C语言的基本结构和逻辑控制,为后续的高级编程技巧打下坚实的基础。

C语言的简单性和灵活性使其成为计算机科学中的核心编程语言。掌握了本文介绍的内容后,建议继续深入学习指针、数组、结构体、函数等高级话题,进一步提高编程能力。

相关文章:

C语言复习概要(一)

本文 C语言入门详解&#xff1a;从基础概念到分支与循环1. C语言常见概念1.1 程序的基本结构1.2 变量作用域和存储类1.3 输入输出1.4 编译与运行 2. C语言中的数据类型和变量2.1 基本数据类型2.2 变量的声明与初始化2.3 常量与枚举 3. C语言的分支结构3.1 if语句3.2 if-else语句…...

二、kafka生产与消费全流程

一、使用java代码生产、消费消息 1、生产者 package com.allwe.client.simple;import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.clients.pr…...

本地搭建OnlyOffice在线文档编辑器结合内网穿透实现远程协作

文章目录 前言1. 安装Docker2. 本地安装部署ONLYOFFICE3. 安装cpolar内网穿透4. 固定OnlyOffice公网地址 前言 本篇文章讲解如何使用Docker在本地Linux服务器上安装ONLYOFFICE&#xff0c;并结合cpolar内网穿透实现公网访问本地部署的文档编辑器与远程协作。 Community Editi…...

ScrapeGraphAI 大模型增强的网络爬虫

在数据驱动的动态领域&#xff0c;从在线资源中提取有价值的见解至关重要。从市场分析到学术研究&#xff0c;对特定数据的需求推动了对强大的网络抓取工具的需求。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线…...

PDF转换为TIF,JPG的一个简易工具(含下载链接)

目录 0.前言&#xff1a; 1.工具目录 2.工具功能&#xff08;效果&#xff09;&#xff0c;如何运行 效果 PDF转换为JPG&#xff08;带颜色&#xff09; PDF转换为TIF&#xff08;LZW形式压缩&#xff0c;可以显示子的深浅&#xff09; PDF转换为TIF&#xff08;CCITT形…...

Wireshark 解析QQ、微信的通信协议|TCP|UDP

写在前面 QQ&#xff0c;微信这样的聊天软件。我们一般称为im&#xff0c;Instant Messaging&#xff0c;即时通讯系统。那大家会不会有疑问&#xff0c;自己聊天内容会不会被黑客或者不法分子知道&#xff1f;这种体量的im是基于tcp还是udp呢&#xff1f;这篇文章我们就来探索…...

网络编程(5)——模拟伪闭包实现连接的安全回收

六、day6 今天学习如何利用C11模拟伪闭包实现连接的安全回收&#xff0c;之前的异步服务器为echo模式&#xff0c;但存在安全隐患&#xff0c;在极端情况下客户端关闭可能会导致触发写和读回调函数&#xff0c;二者都进入错误处理逻辑&#xff0c;进而造成二次析构。今天学习如…...

C#绘制动态曲线

前言 用于实时显示数据动态曲线&#xff0c;比如&#xff1a;SOC。 //用于绘制动态曲线&#xff0c;可置于定时函数中&#xff0c;定时更新数据曲线 void DrawSocGraph() {double f (double)MainForm.readData[12]; //display datachart1.Series[0].Points.Add(f);if (ch…...

用Python实现运筹学——Day 10: 线性规划的计算机求解

一、学习内容 1. 使用 Python 的 scipy.optimize.linprog 进行线性规划求解 scipy.optimize.linprog 是 Python 中用于求解线性规划问题的函数。它实现了单纯形法、内点法等算法&#xff0c;能够处理求解最大化或最小化问题&#xff0c;同时满足线性约束条件。 线性规划问题的…...

[C++]使用C++部署yolov11目标检测的tensorrt模型支持图片视频推理windows测试通过

官方框架&#xff1a; https://github.com/ultralytics/ultralytics yolov8官方最近推出yolov11框架&#xff0c;标志着目标检测又多了一个检测利器&#xff0c;于是尝试在windows下部署yolov11的tensorrt模型&#xff0c;并最终成功。 重要说明&#xff1a;安装环境视为最基…...

霍夫曼树及其与B树和决策树的异同

霍夫曼树是一种用于数据压缩的二叉树结构&#xff0c;通常应用于霍夫曼编码算法中。它的主要作用是通过对符号进行高效编码&#xff0c;减少数据的存储空间。霍夫曼树在压缩领域扮演着重要角色&#xff0c;与B树、决策树等数据结构都有一些相似之处&#xff0c;但又在应用场景和…...

CompletableFuture常用方法

一、获得结果和触发计算 1.获取结果 &#xff08;1&#xff09;public T get() public class CompletableFutureAPIDemo{public static void main(String[] args) throws ExecutionException, InterruptedException{CompletableFuture<String> completableFuture Com…...

本地化测试对游戏漏洞修复的影响

本地化测试在游戏开发的质量保证过程中起着至关重要的作用&#xff0c;尤其是在修复bug方面。当游戏为全球市场做准备时&#xff0c;它们通常会被翻译和改编成各种语言和文化背景。这种本地化带来了新的挑战&#xff0c;例如潜在的语言错误、文化误解&#xff0c;甚至是不同地区…...

使用rust实现rtsp码流截图

中文互联网上的rust示例程序源码还是太稀少&#xff0c;找资料很是麻烦&#xff0c;下面是自己用业余时间开发实现的一个对批量rtsp码流源进行关键帧截图并存盘的rust demo源码记录。 要编译这个源码需要先安装vcpkg&#xff0c;然后用vcpkg install ffmpeg安装最新版本的ffmpe…...

Cpp::STL—string类的模拟实现(12)

文章目录 前言一、string类各函数接口总览二、默认构造函数string(const char* str "");string(const string& str);传统拷贝写法现代拷贝写法 string& operator(const string& str);传统赋值构造现代赋值构造 ~string(); 三、迭代器相关函数begin &…...

一文搞懂SentencePiece的使用

目录 1. 什么是 SentencePiece&#xff1f;2. SentencePiece 基础概念2.1 SentencePiece 的工作原理2.2 SentencePiece 的优点 3. SentencePiece 的使用3.1 安装 SentencePiece3.2 训练模型与加载模型3.3 encode&#xff08;高频&#xff09;3.4 decode&#xff08;高频&#x…...

一个简单的摄像头应用程序1

这个Python脚本实现了一个基于OpenCV的简单摄像头应用,我们在原有的基础上增加了录制视频等功能,用户可以通过该应用进行拍照、录制视频,并查看已拍摄的照片。以下是该脚本的主要功能和一些使用时需要注意的事项: 功能 拍照: 用户可以通过点击界面上的“拍照”按钮或按…...

通过PHP获取商品详情

在电子商务的浪潮中&#xff0c;数据的重要性不言而喻。商品详情信息对于电商运营者来说尤为宝贵。PHP&#xff0c;作为一种广泛应用的服务器端脚本语言&#xff0c;为我们提供了获取商品详情的便捷途径。 了解API接口文档 开放平台提供了详细的API接口文档。你需要熟悉商品详…...

【Android】获取备案所需的公钥以及签名MD5值

目录 重要前提 获取签名MD5值 获取公钥 重要前提 生成jks文件以及gradle配置应用该文件。具体步骤请参考我这篇文章&#xff1a;【Android】配置Gradle打包apk的环境_generate signed bundle or apk-CSDN博客 你只需要从头看到该文章的配置build.gradle&#xff08;app&…...

看480p、720p、1080p、2k、4k、视频一般需要多大带宽呢?

看视频都喜欢看高清,那么一般来说看电影不卡顿需要多大带宽呢? 以4K为例,这里引用一位网友的回答:“视频分辨率4092*2160,每个像素用红蓝绿三个256色(8bit)的数据表示,视频帧数为60fps,那么一秒钟画面的数据量是:4096*2160*3*8*60≈11.9Gbps。此外声音大概是视频数据量…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...