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语言中的数据类型大致可以分为以下几种:

  1. 基本数据类型:包括整数类型、字符类型、浮点类型和双精度浮点类型。
  2. 枚举类型:用于定义有限的、具有离散值的变量。
  3. void类型:表示没有值的数据类型,常用于函数的返回值类型或指针类型。
  4. 派生类型:包括数组类型、指针类型、结构体类型等,它们可以由其他数据类型派生出来。

在接下来的内容中,我们将分别介绍这些数据类型,并详细讲解每种类型的特点及使用场景。


1. 基本数据类型

1.1 整数类型

C语言的整数类型用于表示整数值。其类型包括 charintshortlong,并且还可以通过 unsigned 关键字来表示无符号整数。

类型存储大小值范围
char1字节-128 到 127 或 0 到 255
unsigned char1字节0 到 255
signed char1字节-128 到 127
int2 或 4 字节-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
unsigned int2 或 4 字节0 到 65,535 或 0 到 4,294,967,295
short2字节-32,768 到 32,767
unsigned short2字节0 到 65,535
long4字节-2,147,483,648 到 2,147,483,647
unsigned long4字节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语言提供了三种浮点类型:floatdoublelong double,它们的存储大小和精度有所不同。

类型存储大小值范围精度
float4字节1.2E-38 到 3.4E+386 位有效位
double8字节2.3E-308 到 1.7E+30815 位有效位
long double16字节3.4E-4932 到 1.1E+493219 位有效位

例如,可以通过 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)与较大类型(如 floatdouble)之间。

例如,下面的代码中,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

类型转换的注意事项

  1. 自动类型转换规则

    • 在进行算术运算时,如果参与运算的两个变量类型不同,较小类型的变量会自动转换为较大类型。例如:int 转换为 float
    • 浮点数和整数相乘时,结果会自动转换为浮点数。
    • charshort 类型通常会在运算时转换为 int 类型。
  2. 显式转换的使用

    • 显式类型转换可以控制类型转换的方式,但要小心,过多的强制转换可能会导致数据丢失。例如,将 float 转换为 int 会丢失小数部分。

5. 小结

在C语言中,理解和使用各种数据类型是编写高效代码的基础。掌握整数类型、浮点类型、字符类型、枚举类型等数据类型的使用,可以帮助我们更好地管理内存和处理各种计算任务。

  • 基本数据类型是最常用的类型,包括整数、浮点数、字符等。
  • 枚举类型用于定义有限的离散值,有助于提高代码的可读性。
  • void 类型通常用于函数无返回值、无参数或指针类型等场合。
  • 类型转换是C语言中的重要特性,理解隐式和显式转换的规则可以帮助你避免数据丢失和提升程序的健壮性。

通过本文的学习,相信你已经对C语言的基本数据类型和类型转换有了更深入的


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

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

相关文章

【unity错误】Unity 6 LTS 打开就报错Assertion failed on expressionxxx?

unity6发布已经有一段时间了&#xff0c;如果目前你已经使用了unity6进行项目开发&#xff0c;可能打开会发现如下报错 Assertion failed on expression: ‘!(o->TestHideFlag(Object::kDontSaveInEditor) && (options & kAllowDontSaveObjectsToBePersistent) …

集线器,交换机,路由器,mac地址和ip地址知识记录总结

一篇很不错的视频简介 基本功能 从使用方面来说&#xff0c;都是为了网络传输的标识&#xff0c;和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器&#xff0c;下面是区别&#xff1a; 集线器 集线器&#xff1a;一个简单的物理扩展接口数量的物理硬件。…

【ArcGISPro/GeoScenePro】检查并处理高程数据

数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 数字高程模型 (DEM) 是一种栅格,可显示地面或地形的高程。 数字表面模型 (DSM) 是另一种高程栅格,可显示表面的高度,例如建筑物或树冠的顶部。 您需要准备 DEM 和 DSM 以供分析…

《计算机组成及汇编语言原理》阅读笔记:p177-p177

《计算机组成及汇编语言原理》学习第 13 天&#xff0c;p177-p177 总结&#xff0c;总计 1 页。 一、技术总结 1.real mode A programming model where the program has access to the entire capability of the machine, bypassing security and memory management. Useful…

珞珈一号夜光遥感数据地理配准,栅格数据地理配准

目录 一、夜光数据下载&#xff1a; 二、夜光遥感数据地理配准 三、计算夜光数据值 四、辐射定标 五、以表格显示分区统计 五、结果验证 夜光数据位置和路网位置不匹配&#xff0c;虽然都是WGS84坐标系&#xff0c;不匹配&#xff01;&#xff01;&#xff01;不要看到就直接…

python学习笔记—12—

1. 布尔类型 (1) 定义 (2) 比较运算符 (3) 代码演示 1. 手动定义 bool_1 True bool_2 False print(f"bool_1的内容是&#xff1a;{bool_1}, 类型是&#xff1a;{type(bool_1)}") print(f"bool_2的内容是&#xff1a;{bool_2}, 类型是&#xff1a;{type(bool…

Redis 使用redisTemplate获取某个规则下的key的全量数据(示例Set结构)

如下是redis中存储的数据结构 我想取key以favorites:结尾的所有数据 Redis 的 SCAN 命令用于迭代数据库中的键&#xff0c;支持通过模式过滤结果。模式规则基于 Redis 的通配符匹配语法&#xff0c;类似于文件名匹配规则&#xff1a; *&#xff1a;匹配零个或多个字符。?&…

CertiK《Hack3d:2024年度安全报告》(附报告全文链接)

CertiK《Hack3d&#xff1a;2024年度安全报告》现已发布&#xff0c;本次报告深入分析了2024年Web3.0领域的安全状况。2024年损失总额超过23亿美元&#xff0c;同比增幅高达31.61%&#xff1b;其中&#xff0c;12月的损失金额最少。过去一年&#xff0c;网络钓鱼攻击和私钥泄露…

AI知识库与用户行为分析:优化用户体验的深度洞察

在当今数字化时代&#xff0c;用户体验&#xff08;UX&#xff09;已成为衡量产品成功与否的关键指标之一。AI知识库作为智能客服系统的重要组成部分&#xff0c;不仅为用户提供快速、准确的信息检索服务&#xff0c;还通过用户行为分析&#xff0c;为产品优化提供了深度洞察。…

Vue3 + ElementPlus动态合并数据相同的单元格(超级详细版)

最近的新项目有个需求需要合并单元列表。ElementPlus 的 Table 提供了合并行或列的方法&#xff0c;可以参考一下https://element-plus.org/zh-CN/component/table.html 但项目中&#xff0c;后台数据返回格式和指定合并是动态且没有规律的&#xff0c;Element 的示例过于简单&…

CSS进阶和SASS

目录 一、CSS进阶 1.1、CSS变量 1.2、CSS属性值的计算过程 1.3、做杯咖啡 1.4、下划线动画 1.5、CSS中的混合模式(Blending) 二、SASS 2.1、Sass的颜色函数 2.2、Sass的扩展(extend)和占位符(%)、混合(Mixin) 2.3、Sass的数学函数 2.4、Sass的模块化开发 2.5、Sass…

概率论与数理统计

概率论占比更多&#xff0c;三分之二左右 数理统计会少一些 事件之间的概率 ab互斥&#xff0c;不是ab独立 古典概型吃高中基础&#xff0c;考的不会很多 条件概率公式&#xff0c;要记 公式不要全记&#xff0c;很多有名称的公式是通过基础公式转换而来的 目的在于解决一…

javaEE-多线程进阶-JUC的常见类

juc:指的是java.util.concurrent包&#xff0c;该包中加载了一些有关的多线程有关的类。 目录 一、Callable接口 FutureTask类 参考代码&#xff1a; 二、ReentrantLock 可重入锁 ReentrantLock和synchronized的区别&#xff1a; 1.ReentantLock还有一个方法&#xff1a…

智慧工地系统:建筑施工智能化管理的全新模式

智慧工地概述 智慧工地是将互联网的理念和和物联网的技术引入建筑工地&#xff0c;依托物联网、互联网、大数据、5G技术&#xff0c;建立云端数据平台&#xff0c;形成大数据的业务体系&#xff0c;打通一线操作与远程监管的链条&#xff0c;实现劳务、安全、环境、材料等各个…

FastAPI 统一接口响应(Json)模板的使用示例

目录 FastAPI 统一接口响应&#xff08;Json&#xff09;模板的使用示例 实际案例 实现方法 1. 创建统一响应格式的中间件 2. 将中间件添加到 FastAPI 应用中 3. 解释代码 4. 扩展和定制 5. 测试 FastAPI 统一接口响应&#xff08;Json&#xff09;模板的使用示例 实际…

Linux平台下实现的小程序-进度条

目录 1.换行、回车概念 2.缓冲区 2.1缓冲区 2.2强制刷新 3.进度条程序 Makefile文件 ProgressBar.h ProgressBar.c Main.c 执行结果 1.换行、回车概念 /n&#xff1a;换行回车&#xff08;\r&#xff1a;回车&#xff09; 2.缓冲区 如下图在vim编辑器中的命令模式下…

C++ 基础思维导图(一)

目录 1、C基础 IO流 namespace 引用、const inline、函数参数 重载 2、类和对象 类举例 3、 内存管理 new/delete 对象内存分布 内存泄漏 4、继承 继承权限 继承中的构造与析构 菱形继承 1、C基础 IO流 #include <iostream> #include <iomanip> //…

Java - 日志体系_Apache Commons Logging(JCL)日志接口库_桥接Logback 及 源码分析

文章目录 PreApache CommonsApache Commons ProperLogging &#xff08;Apache Commons Logging &#xff09; JCL 集成logbackPOM依赖配置文件 logback.xml使用 源码分析jcl-over-slf4j 的工作原理1. LogFactory 的实现2. SLF4JLogFactory 和 Log 的实例化过程3. SLF4JLog 和 …

中小企业如何进行数字化转型?

​在这个日新月异的数字时代&#xff0c;企业数字化转型已成为不可逆转的潮流与战略选择。大数据、云计算、人工智能、物联网等前沿科技正重塑着各行各业的面貌。面对激烈的市场竞争和不断变化的客户需求&#xff0c;中小企业作为国民经济的重要组成部分&#xff0c;数字化转型…

闪存知识科普-基本储存单元结构

概述&#xff1a; 闪存&#xff0c;即FlashMemory。其基本储存单元&#xff08;Memory Cell&#xff09;如下图所示。看起来有点像N沟道&#xff08;N-Channel&#xff09;MOS管&#xff0c;但比MOS管多一个悬浮闸&#xff08;Floating Gate&#xff09;。悬浮闸内可以储存电荷…