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.mzph.cn/news/887035.shtml

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

相关文章

基于SpringBoot实现的城镇保障性住房管理系统(代码+论文)

&#x1f389;博主介绍&#xff1a;Java领域优质创作者&#xff0c;阿里云博客专家&#xff0c;计算机毕设实战导师。专注Java项目实战、毕设定制/协助 &#x1f4e2;主要服务内容&#xff1a;选题定题、开题报告、任务书、程序开发、项目定制、论文辅导 &#x1f496;精彩专栏…

springboot基于SpringBoot的社区居民诊疗健康管理系统

摘 要 社区居民诊疗健康管理系统的建设强化了社区医疗服务与居民之间的联系&#xff0c;优化了健康服务供给&#xff0c;提高了医疗资源的利用效率。它不仅有助于提升居民的健康素养和自我管理能力&#xff0c;也是推动实现全民健康信息化、构建以人为本的健康服务体系的重要步…

VSCode 间距太小

setting->font family 使用&#xff1a;Consolas, Courier New, monospace 字体

IntelliJ+SpringBoot项目实战(九)--整合Thymyleaf模版引擎

一、Thymeleaf 基本介绍 Thymeleaf是一款模板引擎产品&#xff0c;是一款优秀的面向JAVA的XML/XHTML/HTML5页面模板&#xff0c;具有丰富的标签语言和函数。因此&#xff0c;在使用SpringBoot开发前端网页&#xff0c;经常选择Thymeleaf。 在前后端分离框架流行的今天&a…

Python中常用的函数介绍

Python中常用的几种函数 1、input函数 input()函数&#xff1a;主要作用是让用户输入某个内容并接收它。 #输入你的年龄 >>> age input("my age is :") my age is :20 执行代码后输入年龄&#xff0c;年龄被存放到age变量中&#xff0c;执行print后终端会…

【动手学深度学习Pytorch】1. 线性回归代码

零实现 导入所需要的包&#xff1a; # %matplotlib inline import random import torch from d2l import torch as d2l import matplotlib.pyplot as plt import matplotlib import os构造人造数据集&#xff1a;假设w[2, -3.4]&#xff0c;b4.2&#xff0c;存在随机噪音&…

亿咖通科技应邀出席微软汽车行业智享会,分享ECARX AutoGPT全新实践

11月14日&#xff0c;全球出行科技企业亿咖通科技&#xff08;纳斯达克股票代码&#xff1a;ECX&#xff09;应邀于广州参加由微软举行的汽车行业智享会&#xff0c;揭晓了亿咖通科技对“AI定义汽车”时代的洞察与技术布局&#xff0c;分享了亿咖通科技汽车垂直领域大模型ECARX…

鸿蒙开发学习|Promise的介绍与在鸿蒙中的使用

Promise的介绍与在鸿蒙中的使用 异步编程 学习Promise的开始,我们要先了解异步编程 一般代码的执行是单线程的机制,就是按次序执行,执行完一个任务后,再执行下一个,如果我们在页面加载的同时时候执行一个请求,拿到数据后映射到界面上,这时我们就需要异步操作来执行这个请求 异…

第二课 Model模型资源导入设置检查与优化

上期我们学习了最简单的audio音效的优化&#xff0c;接下来我们继续model模型资源的优化&#xff0c;我将汇总各路大神关于模型优化的思路和方法供你和我学习。 首先我们还是要把我们优化的目标重申一遍&#xff1a; 优化的目标 1.文件体积尽可能小 2.内存占用尽可能小 3.…

小米路由器用外网域名访问管理界面

本文在Redmi AX3000 (RA81)设置&#xff0c;其他型号路由器的管理界面端口可能各不相同。 开始之前需要保证路由器SSH功能正常&#xff0c;如果没有SSH可以参考这里。 1. 给WAN口开放80端口 可以通过下载mixbox的firewall插件或者其他防火墙插件开放端口。 2. 把域名解析到路…

一次需升级系统的wxpython安装(macOS M1)

WARNING: The scripts libdoc, rebot and robot are installed in /Users/用户名/Library/Python/3.8/bin which is not on PATH. 背景&#xff1a;想在macos安装Robot Framework &#xff0c;显示pip3不是最新&#xff0c;更新pip3后显示不在PATH上 参看博主文章末尾 MAC系统…

Leetcode 求根节点到叶节点数字之和

使用深度优先搜索 DFS 来做 我提供的代码使用的是 深度优先搜索&#xff08;DFS&#xff0c;Depth-First Search&#xff09; 算法。以下是具体的算法思想和实现步骤的解释&#xff1a; 算法思想 树的路径代表数字&#xff1a; 树中每条从根节点到叶子节点的路径可以看作一个整…

IDEA:2023版远程服务器debug

很简单&#xff0c;但是很多文档没有写清楚&#xff0c;wocao 一、首先新建一个远程jvm 二、配置 三、把上面的参数复制出来 -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 四、然后把这串代码放到服务器中&#xff08;这里的0.0.0.0意思是所有IP都能访问&a…

计算机毕业设计 | SpringBoot+vue汽车资讯网站 汽车购买咨询管理系统(附源码+论文)

1&#xff0c;绪论 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理汽车资讯网站的相关信息成为必然…

RedHat系统配置静态IP

1、执行nmtui命令进入字符配置界面如下图所示 2、选择编辑连接进入 3、选择编辑进入后&#xff0c;将IPv4设置为手动模式后&#xff0c;选择显示后进行ip地址、网关、DNS的配置&#xff0c;配置完成后选择确定退出编辑 4、进入主界面后选择启用连接进入后&#xff0c;选择启用&…

Android开发教程案例源码分享-匹配动画多个头像飘动效果

Android开发教程案例源码分享-匹配动画多个头像飘动效果 匹配往往出现多个头像飘动&#xff0c;吸引人点击&#xff0c;有时出现的位置还不固定 一、思路&#xff1a; 用MotionLayout 二、效果图&#xff1a; 看视频更直观点&#xff1a; Android开发教程案例源码分享-匹配…

设计LRU缓存

LRU缓存 LRU缓存的实现思路LRU缓存的操作C11 STL实现LRU缓存自行设计双向链表 哈希表 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存是一种常见的缓存淘汰算法&#xff0c;其基本思想是&#xff1a;当缓存空间已满时&#xff0c;移除最近最少使…

SAM-Med2D 训练完成后boxes_prompt没有生成mask的问题

之前对着这这篇文章去微调SAM_Med2D(windows环境),发现boxes_prompt空空如也。查找了好长时间问题SAM-Med2D 大模型学习笔记&#xff08;续&#xff09;&#xff1a;训练自己数据集_sam训练自己数据集-CSDN博客 今天在看label2image_test.json文件的时候发现了一些端倪: 官方…

39页PDF | 毕马威_数据资产运营白皮书(限免下载)

一、前言 《毕马威数据资产运营白皮书》探讨了数据作为新型生产要素在企业数智化转型中的重要性&#xff0c;提出了数据资产运营的“三要素”&#xff08;组织与意识、流程与规范、平台与工具&#xff09;和“四重奏”&#xff08;数据资产盘点、评估、治理、共享&#xff09;…

在 macOS 和 Linux 中,波浪号 `~`的区别

文章目录 1、在 macOS 和 Linux 中&#xff0c;波浪号 ~macOS示例 Linux示例 区别总结其他注意事项示例macOSLinux 结论 2、root 用户的主目录通常是 /root解释示例切换用户使用 su 命令使用 sudo 命令 验证当前用户总结 1、在 macOS 和 Linux 中&#xff0c;波浪号 ~ 在 macO…