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 摘要 预测-优化是一种利用机器学习在不确定性下进行决策的方法框架。其核心研究问…...

PDF预览插件
PDF预览插件 可用于当前页面弹窗形式查看,可增加一些自定义功能 pdf预览插件 代码块: pdfobject.js <div class="pdfwrap"><div class="item"><h3>笑场</h3><div class="tags"><p>李诞</p><i&…...

node.js之---CommonJS 模块
CommonJS概念 在 Node.js 中,CommonJS 是一种模块化规范,它定义了如何在 JavaScript 中创建和使用模块。CommonJS 是 Node.js 使用的默认模块系统。它让开发者能够分离代码,便于重用和维护。 CommonJS 模块的基本特性 模块导出 在 CommonJ…...

关于AI面试系统2025年趋势评估!
在快速发展的科技浪潮中,AI技术正以前所未有的速度渗透到各行各业。企业招聘领域,作为人才选拔的关键环节,也不例外地迎来了AI面试系统的广泛应用和持续创新。2025年,AI面试系统不仅成为企业招聘的主流工具,更在智能化…...

SQL—替换字符串—replace函数用法详解
SQL—替换字符串—replace函数用法详解 REPLACE() 函数——查找一个字符串中的指定子串,并将其替换为另一个子串。 REPLACE(str, old_substring, new_substring)str:要进行替换操作的原始字符串。old_substring:要被替换的子串。new_substri…...

《Vue3实战教程》40:Vue3安全
如果您有疑问,请观看视频教程《Vue3实战教程》 安全 报告漏洞 当一个漏洞被上报时,它会立刻成为我们最关心的问题,会有全职的贡献者暂时搁置其他所有任务来解决这个问题。如需报告漏洞,请发送电子邮件至 securityvuejs.org。…...

软件项目验收测试需进行哪些测试?软件检测机构分享验收测试作用
在信息技术高速发展的今天,软件项目的验收测试作为软件开发生命周期中至关重要的一环,扮演着不可或缺的角色。软件项目验收测试是在软件开发完成后,依据需求文档和设计规范,对软件系统进行的一项综合性测试。其主要目的是验证开发…...

css实现文字描边
效果 学习啦 -webkit-text-stroke-width: 设置文本描边的宽度,值可以是任何长度单位(如 px, em, rem 等) -webkit-text-stroke-color:设置文本描边的颜色,值可以是任何颜色值(如 red, green, bl…...

(二)当人工智能是一个函数,函数形式怎么选择?ChatGPT的函数又是什么?
在上一篇文章中,我们通过二次函数的例子,讲解了如何训练人工智能。今天,让我们进一步探讨:面对不同的实际问题,应该如何选择合适的函数形式? 一、广告推荐系统中的函数选择 1. 业务目标 想象一下&#x…...

数据挖掘——回归算法
数据挖掘——回归算法 回归算法线性回归最小二乘法优化求解——梯度下降法逻辑回归逻辑回归函数逻辑回归参数估计逻辑回归正则化 决策树回归小结 回归算法 回归分析 如果把其中的一些因素(房屋面积)作为自变量,而另一些随自变量的变化而变化…...

AIGC与未来的通用人工智能(AGI):从生成内容到智能革命
目录 第一部分:AIGC概述 1.1 什么是生成式人工智能(AIGC) 1.2 AIGC的应用 第二部分:通用人工智能(AGI)概述 2.1 什么是通用人工智能(AGI) 2.2 AGI的关键特征 2.3 当前AGI的挑战 第…...