C 语言Day 01 学习总结

news2024/11/20 21:10:04

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 进行输出。

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

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

相关文章

基于深度学习的文本信息提取方法研究(pytorch python textcnn框架)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

Linux(命令格式详细+字符集 图片+大白话)

后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都会及时修改的&#xff01; 在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频 王晓春老师的个人空间…

机器学习中的概率超能力:如何用朴素贝叶斯算法结合标注数据做出精准预测

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

01 —— Webpack打包流程及一个例子

静态模块打包工具 静态模块&#xff1a;html、css、js、图片等固定内容的文件 打包&#xff1a;把静态模块内容&#xff0c;压缩、转译等 Webpack打包流程 src中新建一个index.js模块文件&#xff1b;然后将check.js模块内的两个函数导入过来&#xff0c;进行使用下载webpack…

时间类的实现

在现实生活中&#xff0c;我们常常需要计算某一天的前/后xx天是哪一天&#xff0c;算起来十分麻烦&#xff0c;为此我们不妨写一个程序&#xff0c;来减少我们的思考时间。 1.基本实现过程 为了实现时间类&#xff0c;我们需要将代码写在3个文件中&#xff0c;以增强可读性&a…

学习笔记024——Ubuntu 安装 Redis遇到相关问题

目录 1、更新APT存储库缓存&#xff1a; 2、apt安装Redis&#xff1a; 3、如何查看检查 Redis版本&#xff1a; 4、配置文件相关设置&#xff1a; 5、重启服务&#xff0c;配置生效&#xff1a; 6、查看服务状态&#xff1a; 1、更新APT存储库缓存&#xff1a; sudo apt…

【时间之外】IT人求职和创业应知【35】-RTE三进宫

目录 新闻一&#xff1a;京东工业发布11.11战报&#xff0c;多项倍增数据体现工业经济信心提升 新闻二&#xff1a;阿里云100万核算力支撑天猫双11&#xff0c;弹性计算规模刷新纪录 新闻三&#xff1a;声网CEO赵斌&#xff1a;RTE将成为生成式AI时代AI Infra的关键部分 认知…

css3中的多列布局,用于实现文字像报纸一样的布局

作用&#xff1a;专门用于实现类似于报纸类的布局 常用的属性如下&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…

网络基础(4)IP协议

经过之前的学习对传输协议的学习&#xff0c;对于传输协议从系统底层到应用层对于socket套接字的学习已经有了一套完整的理论。 对于网络的层状结构&#xff0c;现在已经学习到了应用层和传输层: 在之前的学习中&#xff0c;通信的双方都只考虑了双方的传输层的东西&#xff0…

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

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

Leetcode 快乐数

算法思想&#xff1a; 这段代码的目的是判断一个正整数是否是 快乐数&#xff08;Happy Number&#xff09;。根据题目要求&#xff0c;快乐数定义如下&#xff1a; 对于一个正整数&#xff0c;不断将它每个位上的数字替换为这些数字平方和。重复这个过程&#xff0c;如果最终…

探索Python PDF处理的奥秘:pdfrw库揭秘

文章目录 探索Python PDF处理的奥秘&#xff1a;pdfrw库揭秘1. 背景&#xff1a;为何选择pdfrw&#xff1f;2. pdfrw是什么&#xff1f;3. 如何安装pdfrw&#xff1f;4. 五个简单的库函数使用方法4.1 读取PDF信息4.2 修改PDF元数据4.3 旋转PDF页面4.4 提取PDF中的图片4.5 合并P…

若点集A=B则A必能恒等变换地变为B=A这一几何常识推翻直线(平面)公理

黄小宁 关键词&#xff1a;“更无理”复数 复平面z各点z的对应点z1的全体是z1面。z面平移变为z1面就使x轴⊂z面沿本身平移变为ux1轴。R可几何化为R轴&#xff0c;R轴可沿本身平移变为R′轴&#xff0c;R′轴可沿本身平移变为R″轴&#xff0c;...。直线公理和平面公理使几百年…

详细分析ipvsadm负载均衡的命令

目录 前言1. 基本知识2. 命令参数3. 拓展 前言 LVS四层负载均衡架构详解Lvs推荐阅读&#xff1a;添加链接描述 1. 基本知识 ipvsadm 是用于管理和配置 Linux 服务器上 IP Virtual Server (IPVS) 的工具&#xff0c;是 Linux 提供的一个负载均衡模块&#xff0c;支持多种负载…

PH热榜 | 2024-11-19

DevNow 是一个精简的开源技术博客项目模版&#xff0c;支持 Vercel 一键部署&#xff0c;支持评论、搜索等功能&#xff0c;欢迎大家体验。 在线预览 1. Layer 标语&#xff1a;受大脑启发的规划器 介绍&#xff1a;体验一下这款新一代的任务和项目管理系统吧&#xff01;它…

哥德巴赫猜想渐行渐远

我现在的工作&#xff0c;表明经典分析可能出了问题&#xff0c;如此则连Vinogradov的三素数定理都不成立了&#xff0c;更别说基于L-函数方程的陈氏定理“12”了。事实上即使L-函数方程成立&#xff0c;由于我指出Siegel定理不成立&#xff0c;陈景润和张益唐的工作就不成立。…

【支持向量机(SVM)】:相关概念及API使用

文章目录 1 SVM相关概念1.1 SVM引入1.1.1 SVM思想1.1.2 SVM分类1.1.3 线性可分、线性和非线性的区分 1.2 SVM概念1.3 支持向量概念1.4 软间隔和硬间隔1.5 惩罚系数C1.6 核函数 2 SVM API使用2.1 LinearSVC API 说明2.2 鸢尾花数据集案例2.3 惩罚参数C的影响 1 SVM相关概念 1.1…

GraphRAG+Ollama实现本地部署+neo4j可视化结果

GraphRAGOllama实现本地部署neo4j可视化结果 前言一、GraphRAGOllama本地部署补充说明 二、neo4j可视化GraphRAG1.windows安装neo4j2.启动neo4j服务3.进入neo4j的webui界面4.使用neo4J可视化GraphRAG索引5.neo4j不删除旧数据&#xff0c;新建一个数据库 总结 前言 最近部署微软…

ssm142视频点播系统设计与实现+vue(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;视频点播系统设计与实现 摘 要 互联网发展到如今也近20年之久&#xff0c;视频信息一直作为互联网发展中的一个重要角色在不断更新进化。视频信息从最初的文本显示到现在集文字、视频、音频与一体&#xff0c;成为一…

Python全方位技术教程

Python全方位技术教程 引言 Python是一种强大且易于学习的编程语言&#xff0c;因其简洁的语法和丰富的库而受到广泛欢迎。无论是数据分析、机器学习、Web开发&#xff0c;还是自动化脚本&#xff0c;Python都能胜任。本文将深入探讨Python的各个方面&#xff0c;帮助读者全面…