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=2
    return 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语言的基本数据类型和类型转换有了更深入的


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV-Python实战(16)——单/多模板匹配

一、模板匹配函数 cv2.matchTemplate() result cv2.matchTemplate(image*,templ*,method*,mask*) result&#xff1a;函数返回值&#xff0c;比较结果的数组。 image&#xff1a;原始图像。 templ&#xff1a;模板图像。templ.shape<image.shape。 method&#xff1a;…

分布式 L2 网关下的 OVS 未知单播泛洪

大家读完觉得有意义和帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 目录 1 问题描述 2 基础设施和环境信息 3 故障排除 3.1 确认&#xff1a;单播泛洪 3.2 确认&#xff1a;所有泛洪流量都以 L2 GW 为目标 3.3 验证&#xff1a;容器 ARP 处于活动状态时&…

天猫推荐数据集实践

参考自 https://github.com/xufengtt/recom_teach_code&#xff0c;学习记录。 环境配置&#xff08;maxcomputedataworks&#xff09; 下载天猫推荐数据集&#xff1b;开启 aliyun 的 maxcompute&#xff0c;dataworks&#xff0c;pai&#xff1b;使用 odpscmd 上传本地数据…

库的概念:动态库与静态库

在软件开发中&#xff0c;库是代码复用的核心工具&#xff0c;它帮助开发者避免重复造轮子&#xff0c;提升开发效率。库可以分为动态库和静态库&#xff0c;这两者在程序开发中的使用方式、链接过程和性能上存在显著区别。本文将详细讲解动态库与静态库的定义、区别、链接过程…

Flink源码解析之:如何根据JobGraph生成ExecutionGraph

Flink源码解析之&#xff1a;如何根据JobGraph生成ExecutionGraph 在上一篇Flink源码解析中&#xff0c;我们介绍了Flink如何根据StreamGraph生成JobGraph的流程&#xff0c;并着重分析了其算子链的合并过程和JobGraph的构造流程。 对于StreamGraph和JobGraph的生成来说&…

风力涡轮机缺陷检测数据集,91.4%准确识别率,18912张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注

风力涡轮机缺陷检测数据集&#xff0c;91.4&#xff05;准确识别率&#xff0c;18912张图片&#xff0c;支持yolo&#xff0c;PASICAL VOC XML&#xff0c;COCO JSON格式的标注 数据集下载&#xff1a; &#xff59;&#xff4f;&#xff4c;&#xff4f; &#xff56;&#…

系统设计——大文件传输方案设计

摘要 大文件传输是指通过网络将体积较大的文件从一个位置发送到另一个位置的过程。这些文件可能包括高清视频、大型数据库、复杂的软件安装包等&#xff0c;它们的大小通常超过几百兆字节&#xff08;MB&#xff09;甚至达到几个吉字节&#xff08;GB&#xff09;或更大。大文…

linux中执行命令

1.1 命令格式 命令格式&#xff1a; 主命令 选项 参数&#xff08;操作对象&#xff09; 命令分为两类&#xff1a; 内置命令&#xff08; builtin &#xff09;&#xff1a;由 shell 程序自带的命令 外部命令&#xff1a;有独立的可执行程序文件&#xff0c;文件名即命令…

Elasticsearch:当混合搜索真正发挥作用时

作者&#xff1a;来自 Elastic Gustavo Llermaly 展示混合搜索何时优于单独的词汇或语义搜索。 在本文中&#xff0c;我们将通过示例探讨混合搜索&#xff0c;并展示它与单独使用词汇或语义搜索技术相比的真正优势。 什么是混合搜索&#xff1f; 混合搜索是一种结合了不同搜索…

Python pyside6 设置的一个《广告图片生成器》

一、图&#xff1a; 二、说明书&#xff1a; 广告图片生成器使用说明 软件功能 这是一个用于生成广告图片的工具&#xff0c;可以快速制作包含产品图片和文字的广告图片。 主要特点 自定义广告尺寸&#xff08;默认620420像素&#xff09; 智能去除产品图片背景 自动排版&…

Spark基本介绍

一&#xff0c;Spark是什么 1.定义&#xff1a;Aache Spark是用于大规模数据处理的统一分析引擎。 二&#xff0c;Spark的发展 三&#xff0c;Spark的特点 高效性 计算速度快 提供了一个全新的数据结构RDD&#xff08;弹性分布式数据集&#xff09;。整个计算操作&#xff0c;…

Elasticsearch操作笔记版

文章目录 1.ES索引库操作(CRUD)1.mapping常见属性(前提)2.创建索引库3.查询&#xff0c;删除索引库4.修改索引库 2.ES文档操作(CRUD)1.新增文档2.查询、删除文档查询返回的数据解读&#xff1a; 3.修改文档 3.RestClient操作(索引库/文档)(CRUD)1.什么是RestClient2.需要考虑前…

EFEVD: Enhanced Feature Extraction for Smart Contract Vulnerability Detection

假设&#xff0c;攻击者在合约 Dao 内存放有 1 Ether 攻击者调用 withdraw 函数&#xff0c;提取 1 Ether&#xff1b; 函数执行到 require 之后&#xff0c; balances 之前时&#xff0c;6789-6789-6789- contract Dao {function withdraw() public {require(balances[msg.…

我的线代观-秩(向量,矩阵)

都说秩是线代中不可避免的一环&#xff0c;当然&#xff0c;它其中最重要的一环。 我在学习线代之后&#xff0c;也有这种感受&#xff0c;它有着一种很绕的感受。 1.矩阵中 在矩阵中&#xff0c;它的秩是怎么定义的呢。它常常与行列式扯上关系&#xff0c;我们拿三阶矩阵为例…

ES IK分词字典热更新

前言 在使用IK分词器的时候&#xff0c;发现官方默认的分词不满足我们的需求&#xff0c;那么有没有方法可以自定义字典呢&#xff1f; 官方提供了三种方式 一、ik本地文件读取方式 k插件本来已为用户提供自定义词典扩展功能&#xff0c;只要修改配给文件即可&#xff1a; …

基于Spring Boot的电影网站系统

一、技术架构 后端框架&#xff1a;Spring Boot&#xff0c;它提供了自动配置、简化依赖管理、内嵌式容器等特性&#xff0c;使得开发者可以快速搭建起一个功能完备的Web应用。 前端技术&#xff1a;可能采用Vue.js、JS、jQuery、Ajax等技术&#xff0c;结合Element UI等组件库…

C#运动控制系统:雷赛控制卡实用完整例子 C#雷赛开发快速入门 C#雷赛运动控制系统实战例子 C#快速开发雷赛控制卡

雷赛控制技术 DMC系列运动控制卡是一款新型的 PCI/PCIe 总线运动控制卡。可以控制多个步进电机或数字式伺服电机&#xff1b;适合于多轴点位运动、插补运动、轨迹规划、手轮控制、编码器位置检测、IO 控制、位置比较、位置锁存等功能的应用。 DMC3000 系列卡的运动控制函数库功…

android studio 写一个小计时器(版本二)

as版本&#xff1a;23.3.1patch2 例程&#xff1a;timer 在前一个版本的基本上改的&#xff0c;增加了继续的功能&#xff0c;实现方法稍微不同。 动画演示&#xff1a; activity_main.xml <?xml version"1.0" encoding"utf-8"?> <androidx…

python-leetcode-轮转数组

189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""n len(nums)k % n # 如果 k 大于 n&#xff0c;…

亚马逊云科技 | Amazon Nova:智能技术新势力

在2024年亚马逊云科技re:invent大会上&#xff0c;Amazon Nova 系列自研生成式 AI 多模态模型重磅登场&#xff0c;新一代的AI产品-Amazon Nova&#xff0c;隶属于 Amazon Bedrock&#xff0c;一共发布6款大模型&#xff0c;精准切入不同领域&#xff0c;解锁多元业务可能&…