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 摘要 预测-优化是一种利用机器学习在不确定性下进行决策的方法框架。其核心研究问…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
