C 语言Day 01 学习总结

Day 01 学习总结


嵌入式学习的四个阶段

  1. C语言

    • 学习重点:
      • C语言写代码的流程:
        1. 需求分析 - 确定程序目标。
        2. 理清思路 - 明确实现步骤。
        3. 代码编写 - 学习和使用 C 语言语法。
        4. 调试 - 解决错误,验证功能。
        5. 代码提交 - 学习版本控制工具(Git、SVN),代码托管平台(GitHub、Gitee)。
      • C语言语法:
        • 数据类型:shortintlongfloatdoublechar
        • 变量、输入输出、流程控制语句(条件判断、循环)。
        • 函数、数组、指针、结构体、宏定义等高级特性。
        • 文件操作、链表等数据结构。
      • 小项目:
        • 图书管理系统、贪吃蛇、日历程序。
  2. 单片机

    • 学习重点:
      • 基础硬件控制:GPIO、串口、定时器、中断。
      • 通信协议:I2C、SPI、ADC、DMA、蓝牙、WiFi。
      • 上云(物联网平台接入)。
    • 学习方法:
      • 熟读芯片手册(如 STM32)。
      • 模块化学习传感器和功能的实现。
      • 产品开发流程:需求分析、选型、编程、调试、代码管理。
    • 小项目:
      • 智能家居、智能锁、无人机。
  3. Linux

    • 学习重点:
      • 系统编程:文件操作、I/O、多线程、进程间通信。
      • 网络编程:Socket。
      • 驱动开发:内核裁剪与移植、根文件系统制作、外设驱动开发。
      • C++、QT(用户界面开发)。

学习方法与心态

学习方法:
  1. 模仿
    • 理解代码的用途和写法。
  2. 自己动手写
    • 按照学习的思路自己尝试实现。
  3. 总结
    • 每天复盘,通过练习巩固知识。
  4. 项目实践
    • 综合应用知识,参与项目开发。
学习心态:
  1. 认可嵌入式行业
    • 清楚自己的目标,保持兴趣。
  2. 保持节奏
    • 不与他人攀比,掌握每日知识点即可。
  3. 主动拓展
    • 学习数据结构与算法等编程基础知识。

C语言学习

工具与基本框架:
  1. 使用 devcppVS 工具创建 .c 源文件。
  2. 基本 main 函数框架:
    #include<stdio.h>
    int main(void)
    {printf("hello world\n");return 0;
    }
    
C语言语法要点:
  1. 数据类型:

    • 整型:
      • short (2字节),int (4字节),long (4/8字节),long long (8字节)。
      • 有符号/无符号:signed/unsigned
      • 范围:
        • unsigned short: 0~65535
        • signed short: -32768~32767
    • 浮点型:
      • float (4字节, 6~10位有效),double (8字节, 10+位有效)。
    • 字符型:
      • char (1字节),存储 ASCII 值。
      • unsigned char 范围:0~255;signed char 范围:-128~127。
    • 格式控制符:
      • short -> %h
      • int -> %d
      • long -> %ld
      • float -> %f
      • double -> %lf
      • char -> %c
  2. 变量:

    • 定义格式:数据类型 变量名;
    • 全局变量未初始化默认为 0,局部变量未初始化为垃圾值。
    • 赋值方式:
      1. = 赋值符号。
      2. scanf 函数输入:
        int a;
        scanf("%d", &a);
        

学习作业

  1. 总结 数据类型格式控制符内存空间
  2. 定义两个变量,输入数据,输出其和、差、积、商。
  3. 输出 2024年4月的日历
  4. 设计一个程序,模拟购物卡买东西的流程。

C语言练习示例

作业 1:总结
  • 数据类型:shortintlongfloatdoublechar
  • 格式控制符:%d%f%c 等。
作业 2:两数运算
#include<stdio.h>
int main(void)
{int a, b;printf("请输入两个整数:");scanf("%d %d", &a, &b);printf("和:%d\n", a + b);printf("差:%d\n", a - b);printf("积:%d\n", a * b);if (b != 0)printf("商:%d\n", a / b);elseprintf("除数不能为零!\n");return 0;
}
作业 3:日历程序
#include<stdio.h>
int main(void)
{printf("2024年4月的日历:\n");printf("日 一 二 三 四 五 六\n");printf("    1  2  3  4  5  6\n");printf(" 7  8  9 10 11 12 13\n");printf("14 15 16 17 18 19 20\n");printf("21 22 23 24 25 26 27\n");printf("28 29 30\n");return 0;
}
作业 4:购物卡模拟
#include<stdio.h>
int main(void)
{float card_balance = 1000.0; // 初始余额float price;printf("购物卡余额:%.2f\n", card_balance);printf("请输入商品价格:");scanf("%f", &price);if (price <= card_balance){card_balance -= price;printf("购买成功!剩余余额:%.2f\n", card_balance);}else{printf("余额不足,无法购买!\n");}return 0;
}

补充

long 类型的大小(4 字节或 8 字节)取决于编译器、目标平台和数据模型的实现。以下是不同情况下 long 的大小:


1. 数据模型的影响

数据模型决定了基本数据类型的大小,包括 intlongpointer。常见的数据模型如下:

数据模型intlongpointer
ILP32444
LP64488
LLP64448
  • ILP32(32 位架构常见):intlong 和指针都是 4 字节。
  • LP64(Unix 系统 64 位架构常见):long 和指针是 8 字节,int 是 4 字节。
  • LLP64(Windows 64 位架构常见):intlong 是 4 字节,指针是 8 字节。

2. 影响因素
(1)目标平台的位宽
  • 32 位平台
    • 通常使用 ILP32 数据模型,long 为 4 字节。
  • 64 位平台
    • Unix/Linux(如 GCC 编译器)通常使用 LP64 模型,long 为 8 字节。
    • Windows(如 MSVC 编译器)通常使用 LLP64 模型,long 为 4 字节。
(2)编译器的实现
  • 不同的编译器可能会有不同的实现:
    • GCC 和 Clang 在 64 位模式下遵循 LP64 模型,long 为 8 字节。
    • MSVC(微软编译器)在 64 位模式下遵循 LLP64 模型,long 为 4 字节。
(3)操作系统
  • Unix 系统(Linux/macOS)大多采用 LP64 数据模型,64 位下 long 为 8 字节。
  • Windows 系统通常采用 LLP64 数据模型,即使是 64 位,long 仍为 4 字节。

如何检查 long 的大小?

您可以通过以下代码检查 long 的大小:

#include <stdio.h>int main() {printf("Size of long: %zu bytes\n", sizeof(long));return 0;
}

总结
  • long 是 4 字节
    • 32 位平台(常见的数据模型为 ILP32)。
    • 64 位 Windows 系统(数据模型为 LLP64)。
  • long 是 8 字节
    • 64 位 Unix/Linux 系统(数据模型为 LP64)。

理解 long 的大小差异对于跨平台开发至关重要,尤其在需要精确控制数据大小的场景中(如网络协议、文件格式)。


在 C 语言中,%zuprintf 格式说明符,用于输出 size_t 类型 的值。


详细解释
  1. size_t 类型

    • size_t 是一种无符号整数类型,用于表示对象的大小(通常与平台相关)。
    • 它的大小通常等于目标平台指针的大小:
      • 32 位系统:size_t 通常是 4 字节(unsigned int)。
      • 64 位系统:size_t 通常是 8 字节(unsigned long)。
  2. %zu 的作用

    • z 是一个长度修饰符,用于表示与 size_t 对应的类型。
    • u 表示无符号整数(unsigned int)。
    • 因此,%zu 专门用来格式化输出 size_t 类型的变量,确保在不同平台上格式正确。

为什么需要 %zu
  • 不同的平台上,size_t 的实际类型可能不同,例如:
    • 在 32 位系统上,size_t 可能是 unsigned int
    • 在 64 位系统上,size_t 可能是 unsigned long
  • 如果直接使用 %u%lu,可能会导致格式不匹配,%zu 保证了跨平台的兼容性。

示例代码
#include <stdio.h>int main() {size_t size = sizeof(int);printf("Size of int: %zu bytes\n", size);return 0;
}
运行结果
  • 32 位系统Size of int: 4 bytes
  • 64 位系统Size of int: 4 bytes

与其他格式符对比
  • %d:输出有符号整数(int)。
  • %u:输出无符号整数(unsigned int)。
  • %lu:输出 unsigned long 类型。
  • %zu:输出 size_t 类型,专为对象大小设计。

总结
  • 使用 %zu 是一种规范化的方式,用来输出 size_t 类型,确保代码的可移植性和正确性。
  • 推荐在涉及 sizeof 或内存相关操作时,使用 %zu 进行输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/474479.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不完全微分PID控制算法

不完全微分PID控制算法是一种改进的PID控制方法&#xff0c;主要针对PID控制中的微分环节对高频噪声敏感的问题。通过对微分项进行优化和改造&#xff0c;减少其对噪声的放大作用&#xff0c;同时保留对系统动态变化的响应能力。 不完全微分PID控制原理 不完全微分的核心思想是…

DataOps for LLM 的数据工程技术架构实践

导读 在 LLM 蓬勃发展的今天&#xff0c;数据工程已成为支持大规模 AI 模型训练的基石。DataOps 作为数据工程的重要方法论&#xff0c;通过优化数据集成、转换和自动化运维&#xff0c;加速数据到模型的闭环流程。本文聚焦新一代数据 & AI 集成工具- Apache SeaTunnel 在…

go-zero(七) RPC服务和ETCD

go-zero 实现 RPC 服务 在实际的开发中&#xff0c;我们是通过RPC来传递数据的&#xff0c;下面我将通过一个简单的示例&#xff0c;说明如何使用go-zero框架和 Protocol Buffers 定义 RPC 服务。 一、生成 RPC项目 在这个教程中&#xff0c;我们根据user.api文件&#xff0…

【c++丨STL】list模拟实现(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 一、节点、迭代器以及函数声明 二、list功能实现 1. 节点 2. 迭代器 迭代器的默认构造 operator* operator-> 前置和-- 后置和--…

SpringBoot:不支持发行版本17超详细解决办法

一开始linux中就已经下好了JDK21&#xff0c;但是后来创建项目的时候选用了JDK23&#xff0c;导致环境错乱&#xff0c;估计大部分都是因为这个原因&#xff0c;接下来我会一步步带大家解决。 检查系统环境&#xff08;以Ubuntu为例&#xff09; 没有下载JDK的可以在官网下载…

计算机网络中的数据包传输机制详解

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机网络中的数据包传输机制详解 计算机网络中的数据包传输机制详解 计算机网络中的数据包传输机制详解 引言 数据包的基本概念…

Springboot3.3.5 启动流程之 tomcat启动流程介绍

在文章 Springboot3.3.5 启动流程&#xff08;源码分析&#xff09; 中讲到 应用上下文&#xff08;applicationContext&#xff09;刷新(refresh)时使用模板方法 onRefresh 创建了 Web Server. 本文将详细介绍 ServletWebServer — Embedded tomcat 的启动流程。 首先&…

HarmonyOs鸿蒙开发实战(9)=>解析json数据,自动生成实体Bean插件-jsonFormat使用教程(铁粉福利)

1.条件:基于HarmonyOs5.0.0版本. 2.老规矩先看效果> 3.第一步 >下载jsonFormat.jar文件,使用版本1.0.5-deveco https://plugins.jetbrains.com/plugin/24930-jsonformat/versions/stable 4.第二步 > 在DevEco Stuio中安装插件 5.第三步 > 新建bean文件&#xff…

VSCode+ESP-IDF开发ESP32-S3-DevKitC-1(2)第一个工程 LED心跳灯

VSCodeESP-IDF开发ESP32-S3-DevKitC-1&#xff08;2&#xff09;第一个工程 LED心跳灯 前言1.新建工程2.编写控制LED代码3.LED控制独立成.c和.h文件 前言 实际开发中很多时候我们需要有一个类似心跳灯或运行指示灯的灯以不同的状态闪烁以表示程序的运行状态&#xff0c;所以第…

系统掌握大语言模型提示词 - 从理论到实践

以下是我目前的一些主要个人标签&#xff1a; 6 年多头部大厂软件开发经验&#xff1b;1 年多 AI 业务应用经验&#xff0c;拥有丰富的业务提示词调优经验和模型微调经验。信仰 AGI&#xff0c;已经将 AI 通过自定义 Chatbot /搭建 Agent 融合到我的工作流中。头部大厂技术大学…

FromData格式提交接口时入参被转成JSON格式问题

本地上传文件后通过事件提交文件&#xff0c;一般先通过前端组件生成文本流&#xff0c;在通过接口提交文本流&#xff0c;提交文本流一般使用FormData的入参形式传入&#xff0c;接口请求头也默认"Content-Type": “multipart/form-data”&#xff0c;但是某些场景统…

【插件】重复执行 pytest-repeat

安装 pip3 install pytest-repeat 用法 1.命令行 pytest --count num pytest --count 32.装饰器 pytest.mark.repeat(num) #num运行次数 pytest.mark.repeat(5)#执行结果如下&#xff1a;

【Spring】循环引用 解决流程,只用一二级缓存?

文章目录 循环引用循环引用循环引用解决流程为什么不只用一二级缓存&#xff1f;:red_circle: 循环引用 循环引用 循环依赖&#xff1a;循环依赖其实就是循环引用&#xff0c;也就是bean互相持有对方&#xff0c;最终形成闭环。比如A依赖于B&#xff0c;B依赖于A 循环依赖在…

【青牛科技】视频监控器应用

1、简介&#xff1a; 我司安防产品广泛应用在视频监控器上&#xff0c;产品具有性能优良&#xff0c;可 靠性高等特点。 2、图示&#xff1a; 实物图如下&#xff1a; 3、具体应用&#xff1a; 标题&#xff1a;视频监控器应用 简介&#xff1a;视频监控器工作原理是光&#x…

机器学习day5-随机森林和线性代数1最小二乘法

十 集成学习方法之随机森林 集成学习的基本思想就是将多个分类器组合&#xff0c;从而实现一个预测效果更好的集成分类器。大致可以分为&#xff1a;Bagging&#xff0c;Boosting 和 Stacking 三大类型。 &#xff08;1&#xff09;每次有放回地从训练集中取出 n 个训练样本&…

5G与4G互通的桥梁:N26接口

5G的商用部署进程将是一个基于4G系统进行的长期的替换、升级、迭代的过程&#xff0c;4G系统是在过渡到5G全覆盖过程中&#xff0c;作为保障用户业务连续性体验这一目的的最好补充。 因此4G/5G融合组网&#xff0c;以及互操作技术将是各大运营商在网络演进中需要重点考虑的问题…

统信UOS开发环境支持Golang

UOS为Golang开发者提供了各种编辑器和工具链的支持,助力开发者实现高质量应用的开发。 文章目录 一、环境部署Golang开发环境安装二、代码示例Golang开发案例三、常见问题1. 包导入错误2. 系统资源限制一、环境部署 Golang开发环境安装 golang开发环境安装步骤如下: 1)安装…

【c++丨STL】list的使用

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 list简介 一、list的默认成员函数 构造函数(constructor) 析构函数 赋值重载 二、list的迭代器接口 迭代器的功能分类 三、list的容量…

如何解决JAVA程序通过obloader并发导数导致系统夯住的问题 | OceanBase 运维实践

案例背景 某保险机构客户的数据中台&#xff0c;自系统上线后不久&#xff0c;会定期的用 obload 工具从上游业务系统导入数据至OceanBase数据库。但&#xff0c;不久便遇到了应用服务器的 Memory 与 CPU 资源占用持续攀升&#xff0c;最终导致系统夯住而不可用的异常。 memo…

人工智能:塑造未来的工作与生活

目录 人工智能技术的应用前景与影响 人工智能的历史与现状 人工智能的应用领域 人工智能的前景与挑战 个人视角&#xff1a;人工智能的应用前景与未来 人工智能在生活中的潜力 面对人工智能带来的挑战 我的观点与建议 结语 人工智能技术的应用前景与影响 随着人工智能…