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);
    else
        printf("除数不能为零!\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 进行输出。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Postman之安装及汉化基本使用介绍

Postman之安装及汉化 1.安装及汉化postman2.基本使用介绍2.1.基本功能&#xff1a;2.2.编辑、查看、设置环境、全局、集合变量2.3.复制代码片段2.4.运行集合中的所有请求及引用外部文件进行参数化 1.安装及汉化postman 下载安装包 首先可以到官网下载安装包&#xff0c;需要注…

Excel如何把两列数据合并成一列,4种方法

Excel如何把两列数据合并成一列,4种方法 参考链接:https://baijiahao.baidu.com/s?id=1786337572531105925&wfr=spider&for=pc 在Excel中,有时候需要把两列或者多列数据合并到一列中,下面介绍4种常见方法,并且提示一些使用注意事项,总有一种方法符合你的要求:…

Android WMS概览

WMS&#xff08;WindowManagerService&#xff09;是 Android 系统的核心服务&#xff0c;负责管理应用和系统的窗口&#xff0c;包括窗口的创建、销毁、布局、层级管理、输入事件分发以及动画显示等。它通过协调 InputManager 和 SurfaceFlinger 实现触摸事件处理和窗口渲染&a…

Python | Leetcode Python题解之第564题寻找最近的回文数

题目&#xff1a; 题解&#xff1a; class Solution:def nearestPalindromic(self, n: str) -> str:m len(n)candidates [10 ** (m - 1) - 1, 10 ** m 1]selfPrefix int(n[:(m 1) // 2])for x in range(selfPrefix - 1, selfPrefix 2):y x if m % 2 0 else x // 10…

十六.SpringCloudAlibaba极简入门-整合Grpc代替OpenFeign

前言 他来了他来了&#xff0c;停了快2个月了终于又开始更新文章啦&#xff0c;这次带来的绝对是干货&#xff01;&#xff01;&#xff01;。由于公司项目进行重构的时候考虑到&#xff0c;OpenFeign做为服务通信组件在高并发情况下有一定的性能瓶颈&#xff0c;所以将其替换…

【机器学习】机器学习中用到的高等数学知识-7.信息论 (Information Theory)

熵 (Entropy)&#xff1a;用于评估信息的随机性&#xff0c;常用于决策树和聚类算法。交叉熵 (Cross-Entropy)&#xff1a;用于衡量两个概率分布之间的差异&#xff0c;在分类问题中常用。 信息论作为处理信息量和信息传输的数学理论&#xff0c;在机器学习中具有广泛的应用。…

高亮变色显示文本中的关键字

效果 第一步&#xff1a;按如下所示代码创建一个用来高亮显示文本的工具类&#xff1a; public class KeywordUtil {/*** 单个关键字高亮变色* param color 变化的色值* param text 文字* param keyword 文字中的关键字* return*/public static SpannableString highLigh…

【图像处理识别】数据集合集!

本文将为您介绍经典、热门的数据集&#xff0c;希望对您在选择适合的数据集时有所帮助。 1 CNN-ImageProc-Robotics 机器人 更新时间&#xff1a;2024-07-29 访问地址: GitHub 描述&#xff1a; 通过 CNN 和图像处理进行机器人对象识别项目侧重于集成最先进的深度学习技术和…

VTK知识学习(10)- 渲染引擎

1、前言 vtkProp; vtkAbstractMapper; vtkProperty; vtkCamera; vtkLight; vtkRenderer; vtkRenderWindow; vtkRenderWindowInteractor; vtkTransform; vtkLookupTable;………… 这些类都是与数据显示或渲染相关的。 用计算机图形学的专业词汇来说&#xff0c;就是它…

网络基础(3)https和加密

http其它的报头 直接看图片&#xff1a; 上图中的第一个和第二个类型之前已经使用过了也就不多做说明了&#xff0c;第三个报头类型使用的很少了。第四个报头类型主要就使用在一些灰度更新的应用上&#xff0c;确定用户使用的软件的版本不让其访问该版本不能访问的功能。下一个…

高阶C语言之五:(数据)文件

目录 文件名 文件类型 文件指针 文件的打开和关闭 文件打开模式 文件操作函数&#xff08;顺序&#xff09; 0、“流” 1、字符输出函数fputc 2、字符输入函数fgetc 3、字符串输出函数fputs 4、 字符串输入函数fgets 5、格式化输入函数fscanf 6、格式化输出函数fpr…

C#获取视频第一帧_腾讯云媒体处理获取视频第一帧

一、 使用步骤&#xff1a; 第一步、腾讯云开启万象 第二步、安装Tencent.QCloud.Cos.Sdk 包 第三步、修改 腾讯云配置 图片存储目录配置 第四步、执行获取图片并保存 二、封装代码 using System.Text; using System.Threading.Tasks;using COSXML.Model.CI; using COSXML.A…

分词器的概念(通俗易懂版)

什么是分词器&#xff1f;简单点说就是将字符序列转化为数字序列&#xff0c;对应模型的输入。 通常情况下&#xff0c;Tokenizer有三种粒度&#xff1a;word/char/subword word: 按照词进行分词&#xff0c;如: Today is sunday. 则根据空格或标点进行分割[today, is, sunda…

Jenkins更换主题颜色+登录页面LOGO图片

默认主题和logo图片展示 默认主题黑色和白色。 默认LOGO图片 安装插件 Login ThemeMaterial Theme 系统管理–>插件管理–>Available plugins 搜不到Login Theme是因为我提前装好了 没有外网的可以参考这篇离线安装插件 验证插件并修改主题颜色 系统管理–>A…

11.19.2024刷华为OD

文章目录 HJ51HJ53 杨辉三角HJ56HJ57 高精度整数加法HJ58HJ60 简单题HJ63 DNA序列&#xff08;简单题&#xff09;语法知识记录 HJ51 https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d?tpId37&tags&title&difficulty0&judgeStatus0&…

C语言零基础入门

一、输入输出 &#xff08;1&#xff09;scanf scanf 是C语言中的一个标准库函数&#xff0c;用于从标准输入&#xff08;通常是键盘&#xff09;读取数据。scanf 函数定义在 <stdio.h> 头文件中。 #include <stdio.h>int main(void) {//读取整数 int num;print…

应聘美容师要注意什么?博弈美业收银系统/管理系统/拓客系统分享建议

随着美容行业的不断发展&#xff0c;成为一名优秀的美容师需要具备一系列重要的技能和品质。无论是在面试过程中还是在实际工作中&#xff0c;以下建议将帮助你在应聘美容师职位时脱颖而出&#xff1a; ▶ 专业技能和资格 首先&#xff0c;确保你具备所需的专业技能和资格。这…

JVM性能分析工具JProfiler的使用

一、基本概念 JProfiler&#xff1a;即“Java Profiler”&#xff0c;即“Java分析器”或“Java性能分析工具”。它是一款用于Java应用程序的性能分析和调试工具&#xff0c;主要帮助开发人员识别和解决性能瓶颈问题。 JVM&#xff1a;即“Java Virtual Machine”&#xff0c…

css鼠标移动效果高亮追随效果

如图所示&#xff0c;鼠标移动有一块高亮随着鼠标移动。代码如下&#xff1a;(vue3篇) <div class"container"><span class"use-hover-hglh-element trail" :style"isShow ? dyStyle : { opacity: 0 }"></span></div>…

PHP屏蔽海外IP的访问页面(源代码实例)

PHP屏蔽海外IP的访问页面&#xff08;源代码实例&#xff09;&#xff0c;页面禁用境外IP地址访问 <?php/*** 屏蔽海外ip访问* 使用ip2long函数得到ip转为整数的值&#xff0c;判断值是否在任一一个区间中* 以下是所有国内ip段* 调用方法&#xff1a;IschinaIp($ALLIPS)* …