[嵌入式C][入门篇] 快速掌握基础2 (数据类型、常量、变量)

开发环境:

  1. 网页版:跳转
  2. 本地开发(Vscode):跳转

文章目录

  • 一、基本变量大小和范围
    • (1)在8位/32位单⽚机中:
      • 测试代码
      • 结果:64位机器
      • 结果:32位机器(单片机)无对齐限制
  • 二、 局部变量 全局变量 静态变量 常量
    • (1)局部变量
    • (2)全局变量
    • (3)静态变量 (static)
    • (4)常量 (const)
      • 宏定义也可以定义常量(#define)

在这里插入图片描述

一、基本变量大小和范围

(1)在8位/32位单⽚机中:

名称中文名大小(byte)范围格式化符号
(<4byte的都可以使用%d)
char字符1-128 ~ 127%c
short短整型2-32768 ~ 32767%d
int整型4-2147483648 ~ 2147483647%d
long长整型4-2147483648 ~ 2147483647%ld
bool布尔型(逻辑型)40-1%u
float单精度浮点型4符号位:1bit, 整数部分:8bit,
小数部分:23bit
%f
double双精度浮点型8符号位:1bit, 整数部分:11bit,
小数部分:52bit
%lf
long long长长整型8-9223372036854775808~
9223372036854775807
%lld
enum枚举型4(可调整为1)%d
struct结合体型可变
(根据成员计算)
%u
union联合体型可变
(根据成员计算)
%u
*指针型4%u 或者 %x
unsigned无符号-----------------------------
unsigned char
(uint8_t)
字符10 ~ 255 或 0x00 ~ 0xFF%c
unsigned short
(uint16_t)
短整型20 ~ 65,535 或
0x00 ~ 0xFFFF
%u
unsigned int
(uint32_t)
整型40 ~ 4,294,967,295 或
0x00 ~ 0xFFFFFFFF
%u
unsigned long long
(uint64_t)
长长整型80 ~18,446,744,073,709,551,615 或
0x00 ~ 0xFFFFFFFFFFFFFFFF
%lld
long double12
10
16
暂无

暂无

符号位:1bit, 整数部分:16bit,
小数部分:111bit
%Lf 或 %lld 或 %llx

测试代码

#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
enum {ONE = 1,
}num_t;typedef struct { // 字节对齐,按最大成员字节转换uint8_t a; // 编译器强制转换为uint16_tuint16_t b;
}xjq_t;typedef union { // uint8_t buff[8]; // 如果buff>pack,则以此为准,8bytestruct {uint8_t a;  // 1 byteuint16_t b; // 2 byteuint32_t c; // 4 byteuint32_t d; // 4 byte}pack; // 共计 11字节, 编译对齐后,12byte
}lisun_t;int main () { // \t 代表tabprintf("char:\t%d byte\r\n", sizeof(char));printf("short:\t%d byte\r\n", sizeof(short));printf("int:\t\t%d byte\r\n", sizeof(int));printf("long:\t%d byte\r\n", sizeof(long));printf("bool:\t%d byte\r\n", sizeof(bool));printf("float:\t%d byte\r\n", sizeof(float));printf("double:\t%d byte\r\n", sizeof(double));printf("long long:\t%d byte\r\n", sizeof(long long));printf("\r\n");printf("enum:\t%d byte\r\n", sizeof(num_t));printf("struct:\t%d byte\r\n", sizeof(xjq_t));printf("union:\t%d byte\r\n", sizeof(lisun_t));printf("\r\n");printf("uint8_t:\t%d byte\r\n", sizeof(uint8_t));printf("uint16_t:\t%d byte\r\n", sizeof(uint16_t));printf("uint32_t:\t%d byte\r\n", sizeof(uint32_t));printf("uint64_t:\t%d byte\r\n", sizeof(uint64_t));long double test = 0xFFFFFFFFFFFFFFFFull;printf("long double:\t%d byte, Max:%Lf\r\n", sizeof(long double), test);
}

结果:64位机器

在这里插入图片描述

结果:32位机器(单片机)无对齐限制

在这里插入图片描述

二、 局部变量 全局变量 静态变量 常量

特点:① 有变量名,变量值,有类型,占存储单元
   ② 变量名是一个存储地址

(1)局部变量

定义: 局部变量函数中定义的变量。函数执行完毕后,变量自动删除。
使用方式:int a = 3;

#include <stdio.h>
#include <stdint.h>
int main () {uint8_t test = 8; // 局部变量while(1);
}

(2)全局变量

定义:在函数外定义的变量就是全局变量。全局变量不会被删除。可以被外部文件使用。

#include <stdio.h>
#include <stdint.h>
uint8_t g_test = 8; // 全局变量
int main () {while(1);
}

(3)静态变量 (static)

定义:

  1. 局部变量和全局变量都可以作为静态变量。
  2. 不可被外部文件使用。
  3. 成为静态变量后,无法被删除,将永远存在。(不掉电的情况)
#include <stdio.h>
#include <stdint.h>
static uint8_t g_test = 8; // 静态全局变量
int main () {static uint8_t test = 8; // 静态局部变量 (这样的定义等同静态全局变量)while(1);
}

(4)常量 (const)

使用方式:const int a=3;

特点:① 常变量具有变量的属性,有类型,占存储单元,只是不允许修改值
   ② 常变量在芯片的堆区。

#include <stdio.h>
#include <stdint.h>
const uint8_t g_test = 8; // 全局常量 (全部函数均可使用)
int main () {const uint8_t test = 8; // 局部常量 (作用域仅限本函数)while(1);
}

宏定义也可以定义常量(#define)

使用方式:#define PI 3.1416
特点:① 对符号常量的名字是不分配存储单元,PI只是临时变量
   ②预编译后,符号所在的位置均变为符号常量的值

#include <stdio.h>
#include <stdint.h>
#define  PI  3.1416
const uint8_t g_test = PI; // 全局常量 (全部函数均可使用)
int main () {const uint8_t test = PI; // 局部常量 (作用域仅限本函数)while(1);
}

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

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

相关文章

Geoserver扩展发布MySQL视图功能

Geoserver中并不自带mysql数据发布功能&#xff0c;需要扩展外部插件。 1、示例以geoserver-2.20.5版本进行演示&#xff0c;所以MySQL插件需要到该版本对应的“Extensions”标题下查找&#xff0c;下载地址&#xff1a;GeoServer&#xff0c;详见下图 2、选择MySQL进入下载页…

Linux第11步_解决“挂载后的U盘出现中文乱码”

学习完“通过终端挂载和卸载U盘”&#xff0c;我们发现U盘下的中文文件名会出现乱码&#xff0c;现在讲解怎么解决这个问题。其实就是复习一下“通过终端挂载和卸载U盘”&#xff0c;单独讲解&#xff0c;是为了解决问题&#xff0c;一次性搞好&#xff0c;我们会不长记性。 在…

数据在内存中的存储之大小端

今天也是努力学编程&#xff0c;敲代码的一天&#xff01; 1.什么是大小端 其实超过一个字节的数据在内存中存储的时候&#xff0c;就有存储顺序的问题&#xff0c;按照不同的存储顺序&#xff0c;我们分为大端字节序 存储和小端字节序存储&#xff0c;下面是具体的概念: &…

HIL(硬件在环)技术汇总梳理

HIL&#xff08;Hardware-in-the-Loop&#xff09;测试领域的知名公司有dSPACE、NI、Vector和speedgoat等&#xff0c;以下是针对这几家HIL技术的对比分析&#xff1a; 文章目录 dSPACE NI Vector speedgoat 总结 dSPACE dSPACE成立于1988年&#xff0c;起源自德国的帕德…

vue3项目中axios的常见用法和封装拦截(详细解释)

1、axios的简单介绍 Axios是一个基于Promise的HTTP客户端库&#xff0c;用于浏览器和Node.js环境中发送HTTP请求。它提供了一种简单、易用且功能丰富的方式来与后端服务器进行通信。能够发送常见的HTTP请求&#xff0c;并获得服务端返回的数据。 此外&#xff0c;Axios还提供…

FSMC—扩展外部SRAM

一、SRAM控制原理 STM32控制器芯片内部有一定大小的SRAM及FLASH作为内存和程序存储空间&#xff0c;但当程序较大&#xff0c;内存和程序空间不足时&#xff0c;就需要在STM32芯片的外部扩展存储器了。STM32F103ZE系列芯片可以扩展外部SRAM用作内存。 给STM32芯片扩展内存与给…

【计算机网络】TCP原理 | 可靠性机制分析(一)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程、计算机网络的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…

sensor 点亮出图后,画面全黑是为什么?

同事在点一个思特威的 sensor sc035hgs&#xff0c;这个 sensor 主要负责数据采集&#xff0c;然后给到后面的 NN&#xff08;神经网络&#xff09;去做处理。 点亮出图后&#xff0c;画面很黑&#xff0c;如下图所示&#xff1a; 因为没拿到板子&#xff0c;只能盲猜&#xf…

面试官:说说HashMap和HashTable的区别

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

算法日志的存在核心在于搭建自检系统

"相信每一个人执行与日志有关的任务都会遇到这样难题吧&#xff1f;长达几万行的日志&#xff0c;如果我们单纯用肉眼去一个个排查&#xff0c;那么恐怕所耗费的时间是以天为计量单位了。当然这是一种比较夸张的情况&#xff0c;根据我的项目经验&#xff0c;正常情况是十…

每日一博 - 多租户技术及其三种数据存储策略

文章目录 概述应用程序隔离数据隔离小结 概述 多租户技术&#xff08;Multi-Tenant Technology&#xff09;是软件即服务&#xff08;SaaS&#xff09;架构中的一项核心技术&#xff0c;允许单一软件应用或服务同时服务于多个客户&#xff08;即“租户”&#xff09;&#xff…

软件测试|Python函数参数之必传参数、默认参数、可变参数、关键字参数的详细使用

在Python中&#xff0c;函数参数是定义在函数头部的变量&#xff0c;用于接收传递给函数的数据。Python函数参数有四种类型&#xff1a;必传参数、默认参数、可变参数和关键字参数。每种类型都有不同的使用方式和适用场景。本文将详细介绍这四种函数参数的使用方法。 Python函…

ArkTS - 网络请求

一、Axios请求 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 前端开发肯定都使用过一个叫axios的第三方库&#xff0c;它是是一个基于 promise 的网络请求库&#xff0c;可以用于浏览器和 node.js&…

关于曲率、曲率半径和曲率圆,看这几篇文章就够啦

关于曲率、曲率半径和曲率圆的内容&#xff0c;是考研数学数学一和数学二大纲中明确要求掌握的内容&#xff0c;但这部分内容在很多教材教辅以及练习题中较少涉及。在本文中&#xff0c;荒原之梦考研数学网就为大家整理了曲率、曲率半径和曲率圆方程相关的概念、基础知识以及练…

LauraGPT

git&#xff1a;https://github.com/alibaba-damo-academy/FunCodec 文章目录 model archAudioTokenizermodel init model arch text-embedding 用千问的模型参数初始化&#xff1b;AudioEncoder用asr-conformer的参数初始化&#xff1b;所有的参数都参与更新&#xff0c;除了C…

实时语义分割模型PP-LiteSeg论文解读

paper&#xff1a;PP-LiteSeg: A Superior Real-Time Semantic Segmentation Model official implementation&#xff1a;https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.8/paddleseg/models/pp_liteseg.py 本文的创新点 提出了一种灵活的轻量级解码器&#xf…

SpringBoot+Vue轻松实现考试管理系统

简介 本系统基于 Spring Boot 搭建的方便易用、高颜值的教学管理平台&#xff0c;提供多租户、权限管理、考试、练习、在线学习等功能。主要功能为在线考试、练习、刷题&#xff0c;在线学习。课程内容支持图文、视频&#xff0c;考试类型支持考试、练习、问卷。 源码下载 网…

Linux|服务器|简单记录备忘VMware虚拟机开启桌面失败报错:VMware: No 3D enabled (0, Success).的解决

一&#xff0c; VMware虚拟机 Linux操作系统&#xff0c;centos7版本&#xff0c;安装完桌面后&#xff0c;执行startx 命令后 &#xff0c;报错&#xff1a;VMware: No 3D enabled (0, Success). 桌面没有启动成功 完整日志输出如下&#xff1a; [rootnode4 ~]# startx x…

上传自己的依赖到maven仓库 -- 保姆级复盘

上传自己的依赖到maven仓库 -- 保姆级复盘 1、准备工作1.1、安装Git1.2、将需要上传的代码先上传到Gitee中1.2.1、上传步骤1.2.2、如果出现以下错误&#xff08;主要原因是gitee中README.md文件和本地不一致&#xff0c;或者不在本地代码目录中&#xff09; 2、sonatype注册登录…

文件批量重命名:高效整理文件的技巧,随机汉字重命名文件

在数字化时代&#xff0c;每天都要处理大量的文件&#xff0c;无论是文档、图片还是音频、视频。随着时间的推移&#xff0c;文件库可能会变得混乱不堪&#xff0c;难以找到想要的文件&#xff0c;可见文件名有着重要的作用。现在一起来看云炫文件管理器高效的文件整理方法&…