C语言---数据类型

文章目录

  • 数据类型分类
  • 1. 基本类型 (Basic Types)
    • a. 整数类型 (Integer Types)
      • char (字符型)
      • int (整型)
      • short (短整型)
      • long (长整型)
      • long long (C99标准引入)
      • 图片汇总
    • b. 浮点类型 (Floating-Point Types)
      • float (单精度浮点型)
      • double (双精度浮点型)
      • long double (长双精度浮点型)
      • 图片汇总
  • 2. 枚举类型 (Enumeration Type) - enum
  • 3. void 类型
    • 1、作为函数返回类型
    • 2、作为函数参数
    • 3、作为指针类型(万能指针)
  • 4. 派生类型 (Derived Types)
    • a. 指针类型 (Pointer Types)
    • b. 数组类型 (Array Types)
    • c. 结构体类型 (Structure Type) - struct
    • d. 共用体类型 (Union Type) - union
    • e. 函数类型 (Function Types)
  • 类型限定符 (Type Qualifiers)

在 C 语言中,数据类型指用于声明不同类型的变量或函数。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。

数据类型分类

C 语言的数据类型主要可以分为以下几大类:
在这里插入图片描述

1. 基本类型 (Basic Types)

a. 整数类型 (Integer Types)

用于存储整数,可带有符号。
注意:确切的大小和范围依赖于编译器和平台。<limits.h> 头文件定义了这些类型的最大值和最小值(如 INT_MAX, CHAR_BIT 等)。

char (字符型)

用途:存储单个字符(实际上是存储该字符的 ASCII 码)。
大小:通常为 1 字节。
signed char(或直接写char,signed通常可忽略):有符号,范围至少 -128 到 127。
unsigned char:无符号,范围至少 0 到 255。

注意:普通的 char 是否带符号取决于编译器的实现,它可能等同于 signed char 或 unsigned char。如果用于存储小整数,应明确指定 signed 或 unsigned。
在MCU开发中通常使用UI_8、I_8表示C语言中8位的无符号、有符号数据类型。增强工程的可移植性。避免工程师在不同系统下对存储空间大小认知存在偏差导致bug。

int (整型)

用途:最常用的整数类型,用于存储通用整数。
大小:通常为系统字长4字节或者2字节(例如,在 32/64 位系统上通常是 4 字节,部分MCU系统中为2字节)。
范围:至少 -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647。
signed int (或直接写 int,signed通常可忽略):有符号。
unsigned int:无符号,范围至少 0 到 65,535 或 0 到 4,294,967,295。

在MCU开发中通常使用UI_32、I_32表示C语言中32位的无符号、有符号数据类型。增强工程的可移植性。避免工程师在不同系统下对存储空间大小认知存在偏差导致bug。

short (短整型)

用途:用于节省空间的较小整数,范围比 int 小。

大小:至少 2 字节。

signed short : -32,768 到 32,767
unsigned short: 0 到 65,535

在MCU开发中通常使用UI_16、I_16表示C语言中16位的无符号、有符号数据类型。增强工程的可移植性。避免工程师在不同系统下对存储空间大小认知存在偏差导致bug。

long (长整型)

用途:存储大范围的整数。

大小:至少 4 字节,部分系统可能是8字节。

signed long:-2,147,483,648 到 2,147,483,647(4字节时)
unsigned long: 0 到 4,294,967,295(4字节时)

long long (C99标准引入)

long long (C99标准引入)

用途:存储非常大范围的整数。

大小:至少 8 字节

signed long long:0 到 18,446,744,073,709,551,615
unsigned long long:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

在MCU开发中通常使用UI_64、I_64表示C语言中64位的无符号、有符号数据类型。增强工程的可移植性。避免工程师在不同系统下对存储空间大小认知存在偏差导致bug。

图片汇总

图片来自菜鸟教程:
菜鸟教程
在这里插入图片描述
在这里插入图片描述

b. 浮点类型 (Floating-Point Types)

用于存储实数(带小数点的数)。
注意:<float.h> 头文件定义了这些类型的精度和范围(如 FLT_DIG, DBL_MAX 等)。

float (单精度浮点型)

大小:通常为 4 字节。

精度:约 6-7 位有效数字。

后缀:字面量后缀 f 或 F,例如 3.14f。

double (双精度浮点型)

大小:通常为 8 字节。

精度:约 15-16 位有效数字。

说明:C 语言中默认的浮点数字面量(如 3.14)都是 double 类型。

long double (长双精度浮点型)

大小:通常为 8、12 或 16 字节,取决于实现。

精度:提供比 double 更高的精度和范围。

图片汇总

图片来自菜鸟教程:
菜鸟教程
在这里插入图片描述

2. 枚举类型 (Enumeration Type) - enum

用于定义一组命名的整数常量,使代码更易读。
枚举变量在C语言中相当于是一个范围限制的整数型,将同一层级同一概念的值封装在一个枚举类型中,提高代码可读性,使用时相当于宏定义。

// 定义了一个枚举类型 enum Color
enum Color {RED,    // 默认值为 0GREEN,  // 默认值为 1BLUE    // 默认值为 2
};// 声明一个枚举变量
enum Color myColor = GREEN;
printf("%d\n", myColor); // 输出 1// 可以显式指定值
enum Status {ERROR = -1,SUCCESS = 0,PENDING = 1
};

3. void 类型

void 类型表示“无”或“空”。

1、作为函数返回类型

表示函数不返回任何值。

void sayHello() {printf("Hello\n");// 无需 return 语句,或使用 return;
}

2、作为函数参数

表示函数不接受任何参数。

int getRandomNumber(void) { // 明确表示无参数return rand();
}

3、作为指针类型(万能指针)

void* 是一种通用指针类型,可以指向任何数据类型的数据。在使用前必须进行强制类型转换。

int num = 10;
void *ptr = &num; // 合法// printf("%d\n", *ptr); // 错误:void* 不能直接解引用
printf("%d\n", *((int*)ptr)); // 正确:先转换为 int*

4. 派生类型 (Derived Types)

这些类型是从基本类型或其它派生类型构造而来的。

a. 指针类型 (Pointer Types)

存储变量的内存地址。声明时在类型名后加 *。

int num = 10;
int *ptr = &num; // ptr 是一个指向 int 的指针,存储了 num 的地址printf("%d\n", *ptr); // 解引用指针,获取它指向的值(输出 10

b. 数组类型 (Array Types)

存储相同类型的元素的集合。声明时在变量名后加 [size]。

int numbers[5] = {1, 2, 3, 4, 5}; // 包含 5 个整数的数组
char str[] = "Hello"; // 编译器自动计算大小的字符数组(字符串)

c. 结构体类型 (Structure Type) - struct

将多个不同类型的变量组合成一个单一的复合类型。

// 定义了一个结构体类型 struct Person
struct Person {char name[50];int age;float height;
};// 声明一个结构体变量并初始化
struct Person p1 = {"Alice", 30, 165.5};// 访问成员
printf("Name: %s, Age: %d\n", p1.name, p1.age);

d. 共用体类型 (Union Type) - union

允许在同一内存位置存储不同的数据类型。所有成员共享同一块内存,大小由最大的成员决定。

union Data {int i;float f;char str[20];
};union Data data;
data.i = 10; // 现在 data 存储的是一个整数
data.f = 220.5; // 写入一个浮点数,会覆盖之前的整数
// 此时读取 data.i 将是无意义的值

e. 函数类型 (Function Types)

函数也有类型,由其返回类型和参数类型决定。这在函数指针中非常有用。

// 一个函数类型:返回 int,接受两个 int 参数
int add(int a, int b) {return a + b;
}// 声明一个匹配该类型的函数指针
int (*funcPtr)(int, int) = add;// 通过函数指针调用函数
int result = funcPtr(3, 4); // result = 7

类型限定符 (Type Qualifiers)

为类型提供额外的属性。
1、const:定义常量,值在初始化后不能被修改。

const int max_size = 100;
// max_size = 200; // 编译错误!

2、volatile:告诉编译器该变量可能被程序之外的代理(如硬件、中断)修改,禁止编译器做某些优化。

volatile int hardware_register;

3、restrict (C99):一个指针限定符,向编译器承诺,在该指针的生命周期内,它是访问其所指向数据的唯一方式,从而允许编译器进行优化。

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

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

相关文章

本搭建乌云漏洞库

1.下载镜像站文件&#xff0c;并拖入虚拟机 2.将bugs.rar解压至网站根目录下 /var/www/html 3.配置bugs/conn.php 4.在bugs下创建upload目录&#xff0c;将10-14、15-a、15-b、16压缩包文件解压到该upload目录 5.把wooyun.rar解压到 /mysql/data/wooyun目录下 6.配置hosts文件后…

Vmware虚拟机 处理器配置选项配置介绍

1. 处理器配置选项好&#x1f44c;&#xff0c;我来帮你逐一解读 VMware 里 虚拟机处理器 这些选项的含义。 你截的图里&#xff0c;主要有三块内容&#xff1a; 处理器数量 每个处理器的内核数量 ©虚拟化引擎1️⃣ 处理器数量 这是分配给虚拟机的 逻辑 CPU 插槽数。一般…

day40-tomcat

1.每日复盘与今日内容1.1复盘keepalived高可用配置抢占式与非抢占式脑裂keepalived处理Nginx挂掉1.2今日内容部署、安装、配置tomcat(systemctl)Tomcat主配置文件部署静态页部署zrlog&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;接入负载均衡挂载到NFS2…

【RA-Eco-RA4E2-64PIN-V1.0 开发板】步进电机的串口控制

【RA-Eco-RA4E2-64PIN-V1.0 开发板】步进电机的串口控制 本文介绍了 RA-Eco-RA4E2-64PIN-V1.0 开发板通过串口指令实现 28BYJ-48 步进电机旋转角度和速度的精确控制的项目设计。 项目介绍 硬件连接&#xff1a;28BYJ-48 步进电机、ULN2003 驱动板、Jlink 调试器、供电电源等&am…

PiscCode基于 Mediapipe 的人体多模态关键点检测与可视化系统 —— HumanMultiLandmarker 深度解析

一、引言 在计算机视觉领域&#xff0c;人体关键点检测&#xff08;Human Pose Estimation&#xff0c;HPE&#xff09;一直是研究和应用的热点方向之一。随着深度学习与实时图像处理技术的发展&#xff0c;人体姿势估计已经从传统的 2D 检测走向了 3D 空间建模&#xff0c;并…

文献阅读笔记【物理信息机器学习】:Physics-informed machine learning

文献阅读笔记&#xff1a;Physics-informed machine learningSummaryResearch ObjectiveBackground / Problem Statement问题背景研究现状需解决的问题问题出现的原因分析问题解决思路Method(s)问题建模作者解决问题的方法/算法1. 观测偏差&#xff08;Observational Biases&am…

Linux服务环境搭建指南

实验拓扑概述**实验拓扑&#xff1a; APPSRV&#xff1a; 主机名&#xff1a;appsrv.example.com ip地址&#xff1a;192.168.100.10 网关&#xff1a;192.168.100.254 网卡为NAT模式 STORAGESRV&#xff1a; 主机名&#xff1a;storagesrv.example.com ip地址&#xff1a;192.…

[特殊字符] 数据库知识点总结(SQL Server 方向)

一、数据库基础概念数据库&#xff08;Database&#xff09;&#xff1a;存储和管理数据的容器。数据表&#xff08;Table&#xff09;&#xff1a;以行和列形式组织数据。行&#xff08;Row&#xff09;&#xff1a;一条记录。列&#xff08;Column&#xff09;&#xff1a;字…

【PSINS工具箱】MATLAB例程,二维平面上的组合导航,EKF融合速度、位置和IMU数据,4维观测量

文章目录关于工具箱程序简介代码概述核心功能与步骤运行结果MATLAB代码关于工具箱 本文所述的代码需要基于PSINS工具箱&#xff0c;工具箱的讲解&#xff1a; PSINS初学指导&#xff1a;https://blog.csdn.net/callmeup/article/details/137087932 本文为二维平面上的定位&am…

MiMo-VL 技术报告

摘要 我们开源了 MiMo-VL-7B-SFT 和 MiMo-VL-7B-RL 两个强大的视觉语言模型,它们在通用视觉理解和多模态推理方面均展现出最先进的性能。MiMo-VL-7B-RL 在 40 项评估任务中的 35 项上优于 Qwen2.5-VL-7B,并在 OlympiadBench 上获得 59.4 分,超越了参数量高达 780 亿的模型。…

CTFshow Pwn入门 - pwn 19

先看main函数&#xff1a;fclose(_bss_start) fclose(stdout) 关闭了默认fd1的输出&#xff0c;所以system的结果无法直接看到。 思路&#xff1a; 输出重定向。 ls 1>&0 ls >&0 ls >&2 ###三种写法均可将输出重定向到能回显的终端并获得一个新的交互…

Redis(以Django为例,含具体操作步骤)

简介Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据结构存储系统&#xff0c;支持多种数据结构&#xff08;如字符串、哈希、列表、集合、有序集合等&#xff09;&#xff0c;可用作数据库、缓存或消息队列。其核心特点包括&#xff1a;高性能&am…

浏览器解析网址的过程

问题浏览器解析网址的过程我的回答当你在浏览器地址栏输入一个URL&#xff08;比如www.example.com&#xff09;并按下回车后&#xff0c;会发生以下一系列步骤&#xff1a;首先&#xff0c;浏览器会解析URL结构&#xff0c;确定要访问的协议、域名和路径。如果你没有输入协议部…

NVIDIA Nsight Systems性能分析工具

* 性能分析 NVIDIA Nsight Systems (推荐)&#xff1a; 这是 NVIDIA 官方推荐的更现代、功能更强大的分析工具。 安装 Nsight Systems在 Docker 容器中启动程序&#xff1a;# 确保你在启动容器时挂载了/usr/local/cuda/targets/x86_64-linux/lib/ 和 /usr/local/nvidia/lib64 #…

后台管理系统-14-vue3之tag标签页的实现

文章目录 1 tag静态实现 1.1 CommonTag.vue(el-tag) 1.2 Main.vue(普通组件标签) 2 tag通过pinia管理 2.1 CommonAside.vue(菜单点击事件) 2.2 stores/index.js(selectMenu()和tags) 2.3 CommonTag.vue(计算属性tags) 3 点击tag之后跳转到指定页面 3.1 views/Mail.vue(商品) 3.…

CMake2: CMakeLists.txt的常用命令

参考链接: 爱编程的大丙 | CMake教程 CMakeLists指令以及常用方法 现代 CMake 教程 文章目录1. cmake_minimum_required( )2. project( )3. add_executable( )4. set()5. aux_source_directory( )6. file( )7. include_directories( )8. add_library( )9. link_libraries()与li…

Ansible入门:自动化运维基础

Ansible 基础概念与安装1. 自动化动机 (Motivation for Automation)概念解释&#xff1a; 指为什么要用Ansible等工具来替代手动管理服务器。核心动机包括&#xff1a;效率与速度&#xff1a; 同时在上百甚至上千台服务器上执行任务&#xff0c;秒级完成&#xff0c;远非人工可…

【测试】基于博客系统的测试报告

前言 本篇博客对简易的博客系统做的测试总结一份测试报告&#xff0c;包含功能测试&#xff0c;自动化测试&#xff0c;性能测试 &#x1f493; 个人主页&#xff1a;zkf ⏩ 文章专栏&#xff1a;测试 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&#x1f44d;…

Oracle:配置让插入语句时id自动输入

Oracle:配置让插入语句时id自动输入无需手动指定&#xff0c;核心是利用 序列&#xff08;Sequence&#xff09; 或 自增列&#xff08;Identity Column&#xff09; 来自动生成唯一值。以下是两种常用方案&#xff1a;方案 1&#xff1a;使用序列&#xff08;Sequence&#xf…

秒杀服务的回调方案

在秒杀场景中&#xff0c;用户点击“抢购”后&#xff0c;后端需要通过异步处理应对高并发&#xff08;避免请求阻塞&#xff09;&#xff0c;同时需通过实时回调机制将最终结果&#xff08;成功/失败&#xff09;推送给客户端并展示。核心方案是&#xff1a;“前端发起请求→后…