3. C语言 数据类型
本章目录:
- 前言:
- C语言中的数据类型分类
- 1. 基本数据类型
- 1.1 整数类型
- 1.2 浮点类型
- 1.3 字符型常量
- 1.4 字符串常量
- 2. 枚举类型
- 3. void 类型
- void类型的使用示例:
- 4. 类型转换
- 4.1 隐式类型转换
- 4.2 显式类型转换
- 类型转换的注意事项
- 5. 小结
前言:
C语言是一种强类型语言,其中每种数据都必须明确指定其类型。数据类型决定了变量的存储大小、有效范围以及如何存储和操作数据。理解数据类型不仅能帮助你有效管理内存,还能确保程序按预期运行。
在本篇博客中,我们将深入探讨C语言的各种数据类型,及其使用方式、特点和注意事项。
C语言中的数据类型分类
C语言中的数据类型大致可以分为以下几种:
- 基本数据类型:包括整数类型、字符类型、浮点类型和双精度浮点类型。
- 枚举类型:用于定义有限的、具有离散值的变量。
- void类型:表示没有值的数据类型,常用于函数的返回值类型或指针类型。
- 派生类型:包括数组类型、指针类型、结构体类型等,它们可以由其他数据类型派生出来。
在接下来的内容中,我们将分别介绍这些数据类型,并详细讲解每种类型的特点及使用场景。
1. 基本数据类型
1.1 整数类型
C语言的整数类型用于表示整数值。其类型包括 char
、int
、short
、long
,并且还可以通过 unsigned
关键字来表示无符号整数。
类型 | 存储大小 | 值范围 |
---|---|---|
char | 1字节 | -128 到 127 或 0 到 255 |
unsigned char | 1字节 | 0 到 255 |
signed char | 1字节 | -128 到 127 |
int | 2 或 4 字节 | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int | 2 或 4 字节 | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2字节 | -32,768 到 32,767 |
unsigned short | 2字节 | 0 到 65,535 |
long | 4字节 | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4字节 | 0 到 4,294,967,295 |
注意:不同平台上,整数类型的存储大小可能不同。例如,在32位系统中,int
的大小通常为4字节,而在16位系统中,可能是2字节。
你可以使用 sizeof
运算符来确定某个数据类型的存储大小,例如:
#include <stdio.h>int main() {printf("int 存储大小: %lu 字节\n", sizeof(int));return 0;
}
1.2 浮点类型
浮点类型用于表示带有小数的数值。C语言提供了三种浮点类型:float
、double
和 long double
,它们的存储大小和精度有所不同。
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float | 4字节 | 1.2E-38 到 3.4E+38 | 6 位有效位 |
double | 8字节 | 2.3E-308 到 1.7E+308 | 15 位有效位 |
long double | 16字节 | 3.4E-4932 到 1.1E+4932 | 19 位有效位 |
例如,可以通过 float.h
头文件中的宏来获取浮点数的最大值、最小值和精度。下面是一个示例程序:
#include <stdio.h>
#include <float.h>int main() {printf("float 最大值: %E\n", FLT_MAX);printf("float 最小值: %E\n", FLT_MIN);printf("float 精度值: %d\n", FLT_DIG);return 0;
}
1.3 字符型常量
字符型常量是单个字符,使用英文单引号括起来。例如:'a'
、'b'
、'*'
。
此外,C语言还支持转义字符,例如:\n
(换行)、\t
(制表符)等。字符型常量的存储大小通常为1个字节。
1.4 字符串常量
字符串常量是由双引号括起来的字符序列,可以包含多个字符,例如 "Hello, World!"
。字符串常量是以 null 字符 \0
结尾的,因此在内存中会多占用一个字节。
2. 枚举类型
枚举类型用于定义一组离散的整数值。使用 enum
关键字可以定义一个枚举类型,它帮助提高代码的可读性和可维护性。
#include <stdio.h>enum Day { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };int main() {enum Day today = Wednesday;printf("Today is: %d\n", today); // 输出 2,因为 Monday=0, Tuesday=1, Wednesday=2return 0;
}
在这个例子中,enum Day
定义了一周的七天,并且每个星期几对应一个整数值。
3. void 类型
void
类型表示没有值的数据类型。它通常用于以下情况:
- 函数无返回值:例如
void function()
表示没有返回值的函数。 - 函数无参数:例如
int rand(void)
,表示函数没有参数。 - 指针类型:
void*
是一种通用指针类型,可以指向任何数据类型,但需要进行类型转换后才能使用。
void类型的使用示例:
#include <stdio.h>void displayMessage() {printf("Hello, World!\n");
}int main() {displayMessage(); // 调用无返回值的函数return 0;
}
4. 类型转换
4.1 隐式类型转换
隐式类型转换也叫自动类型转换,它是编译器在运算时自动进行的数据类型转换。通常发生在较小类型(如 int
)与较大类型(如 float
或 double
)之间。
例如,下面的代码中,i + f
会自动将 i
转换为 double
类型:
int i = 10;
float f = 3.14;
double d = i + f; // 隐式转换: int -> double
4.2 显式类型转换
显式类型转换需要使用强制类型转换符 (type)
,可以将一个数据类型的值强制转换为另一个数据类型。这在某些情况下非常有用,但也可能导致精度丢失。
例如,下面的代码中,我们将 double
类型的值强制转换为 int
类型:
double d = 3.14159;
int i = (int)d; // 显式转换: double -> int
类型转换的注意事项
-
自动类型转换规则:
- 在进行算术运算时,如果参与运算的两个变量类型不同,较小类型的变量会自动转换为较大类型。例如:
int
转换为float
。 - 浮点数和整数相乘时,结果会自动转换为浮点数。
char
和short
类型通常会在运算时转换为int
类型。
- 在进行算术运算时,如果参与运算的两个变量类型不同,较小类型的变量会自动转换为较大类型。例如:
-
显式转换的使用:
- 显式类型转换可以控制类型转换的方式,但要小心,过多的强制转换可能会导致数据丢失。例如,将
float
转换为int
会丢失小数部分。
- 显式类型转换可以控制类型转换的方式,但要小心,过多的强制转换可能会导致数据丢失。例如,将
5. 小结
在C语言中,理解和使用各种数据类型是编写高效代码的基础。掌握整数类型、浮点类型、字符类型、枚举类型等数据类型的使用,可以帮助我们更好地管理内存和处理各种计算任务。
- 基本数据类型是最常用的类型,包括整数、浮点数、字符等。
- 枚举类型用于定义有限的离散值,有助于提高代码的可读性。
- void 类型通常用于函数无返回值、无参数或指针类型等场合。
- 类型转换是C语言中的重要特性,理解隐式和显式转换的规则可以帮助你避免数据丢失和提升程序的健壮性。
通过本文的学习,相信你已经对C语言的基本数据类型和类型转换有了更深入的
相关文章:
3. C语言 数据类型
本章目录: 前言:C语言中的数据类型分类1. 基本数据类型1.1 整数类型1.2 浮点类型1.3 字符型常量1.4 字符串常量 2. 枚举类型3. void 类型void类型的使用示例: 4. 类型转换4.1 隐式类型转换4.2 显式类型转换类型转换的注意事项 5. 小结 前言&a…...
npm install 安装选项 -d -s -g
在使用 npm install 时,-d、-g 和 -s 是不同的选项,它们分别代表不同的安装模式或行为。以下是它们的详细解释: 1. -d:--save-dev 含义:将包安装为开发依赖(devDependencies)。使用场景&#…...
pdf预览兼容问题- chrome浏览器105及一下预览不了
使用的"tato30/vue-pdf": "^1.11.2"预览插件,发现chrome浏览器105及一下预览不了 pdfPreview预览组件: <template><div id"vue_pdf_view"><div class"tool_tip"><template v-if"pa…...
【可实战】需求分析-测试计划↓-测试设计-测试执行-测试总结↓(包含测试计划、测试总结模板,以公司要求为准)
一、完成软件测试工作的必要步骤 需求分析-测试计划-测试设计-测试执行-测试总结 二、测试计划 (一)测试计划模版 模板在线查看: https://docs.qq.com/doc/DV2hTamxJWnNDaUFF 模板(百度网盘): 链接&…...

MySQL 03 章——基本的SELECT语句
一、SQL概述 (1)SQL背景知识 SQL(Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言,与数据直接打交道不同的数据库管理系统生产厂商都支持SQL语句,但都有特有内容 …...

【项目】智能BI洞察引擎 测试报告
目录 一、项目背景BI介绍问题分析项目背景 二、项目功能三、功能测试1、登录测试测试用例测试结果 2、注册测试测试用例测试结果出现的bug 3、上传文件测试测试用例测试结果 4、AI生成图表测试测试用例测试结果 5、分析数据页面测试(异步)测试用例测试结…...

javaEE-文件操作和IO-文件
目录 一.什么是文件 1.文件就是硬盘(磁盘)上的文件。 2.计算机中存储数据的设备: 3.硬盘的物理特征 4.树型结构组织和⽬录 5.文件路径 文件路径有两种表示方式: 6.文件的分类 二、java中文件系统的操作 1.File类中的属性: 2.构造方…...

2025跨年倒计时
<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>2025年跨年倒计时</title><style>/* 页…...

下载mysql免安装版和配置
1、下载地址 点击去官网下载https://downloads.mysql.com/archives/community/ 2、解压安装mysql 解压的文件夹是没有my.ini文件和data目录,需要我们自己去创建 根目录下创建my.ini,根目录创建data [mysql] default-character-setutf8[mysqld] #端口 po…...

代码模板-C语言常用的errno的名字、值以及对应关系?转换字符串函数?(errno.h, strerror; errno -l; man errno)
背景 errno.h是C 编程语言标准库中的头文件。它定义了使用符号errno (“错误号”的缩写)报告和检索错误情况的宏。经常需要用来在内核态用户态返回错误寻找,本文以供快速检索。 常用函数与用法 strerror 根据errno获取文件 比如ÿ…...

全新免押租赁系统助力商品流通高效安全
内容概要 全新免押租赁系统的推出,可以说是一场商品流通领域的小革命。想象一下,不再为押金烦恼,用户只需通过一个简单的信用评估,就能快速租到所需商品,这种体验简直令人惊喜!这个系统利用代扣支付技术&a…...
5.微服务灰度发布落地实践(rocketmq增强)
文章目录 前言发送端灰度增强订阅端灰度增强 前言 上一篇分析了,在灰度发布实现中为什么要对消息队列灰度发布进行增强。本篇主要介绍如何实现rocketmq 灰度发布的增强. 发送端灰度增强 订阅端灰度增强...
MySql核心面试面试问题解析
MySql核心面试面试问题解析 有时候往往简单的才是最容易失分的!!! MySQL支持哪些存储引擎?有何区别? 答案:常见的存储引擎有InnoDB、MyISAM、Memory等。InnoDB支持事务,MyISAM不支持事务&#x…...

logback之自定义pattern使用的转换器
目录 (1)场景介绍 (2)定义转换器BizCallerConverter (3)logback配置conversionRule (4)测试效果 前文《logback之pattern详解以及源码分析》已经介绍了pattern,以及…...

【MySQL】发展起源与核心架构组件详细介绍
🐇明明跟你说过:个人主页 🏅个人专栏:《MySQL技术精粹》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、MySQL起源背景 2、MySQL发展里程 3、MySQL应用场景 二、MySQL的核心特…...
uni-app 多平台分享实现指南
uni-app 多平台分享实现指南 在移动应用开发中,分享功能是一个非常常见的需求,尤其是在社交媒体、营销活动等场景中。使用 uni-app 进行多平台开发时,可以通过一套代码实现跨平台的分享功能,涵盖微信小程序、H5、App 等多个平台。…...
Spring中的IOC是什么,优缺点有哪些?
目录 IOC的核心概念 IOC的优点 IOC的缺点 使用场景说明 总结 IOC(控制反转)是一种设计思想,用于实现低耦合、高内聚的软件架构。它通过将对象的创建和依赖管理交给外部容器来实现,从而减少对象之间的直接依赖关系。 IOC的核…...

Qt实现使用TCP与RS485串口设备通信————附带详细实践方法
文章目录 0 背景1 协议介绍1.1 modbusRTU协议1.1.1 简介1.1.2 RS485和modbusRTU的关系1.1.3 modbusRTU 协议格式1.1.3.1 0x10写多个保持寄存器1.1.3.2 0x02读多个离散输入寄存器1.1.3.3 0x03读多个保持寄存器1.1.3.4 0x04读多个输入寄存器 1.2 ModbusTCP协议1.2.1 ModbusTCP协议…...
js将object整个实体对象作为参数传递
①将object实体转化成json字符串传递: JSON.stringify(obj) ②将json字符串转化成JSON对象值:JSON.parse(json) 实际应用: <div id"div_notice" stylefont-size:14px; width:100%; height:200px; overflow-y:auto;></di…...

超越局部损失函数的预测-优化方法
1 文章信息 文章名为Leaving the Nest : Going Beyond Local Loss Functions for Predict-Then-Optimize。发表在第38届AAAI Conference on Artificial Intelligence. 作者来自哈佛大学。 2 摘要 预测-优化是一种利用机器学习在不确定性下进行决策的方法框架。其核心研究问…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...