【C语言】(2)数据类型

在 C 语言中,数据类型定义了变量或函数能够接受的数据形式。它们决定了数据存储的空间大小和如何解释存储的位模式。C语言提供了多种基本数据类型,可分为以下几类:

  1. 基本类型: 算术类型,包括两种类型:整数类型和浮点类型。
  2. 枚举类型: 算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。
  3. void 类型: 类型说明符 void 表明没有可用的值。
  4. 派生类型: 包括:指针类型、数组类型、结构类型、共用体类型和函数类型。 数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值的类型。

一.基本类型

基本类型是算术类型,包括整数类型和浮点类型。整数类型用于表示没有小数部分的数值,而浮点类型用于表示有小数部分的数值。

整数类型

下表列出了关于标准整数类型的存储大小和值范围的细节:

类型描述值范围存储大小
char字符型-128 到 1271 字节
unsigned char无符号字符型0 到 2551 字节
signed char有符号字符型-128 到 1271 字节
int整型-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,6472 或 4 字节
unsigned int无符号整型0 到 65,535 或 0 到 4,294,967,2952 或 4 字节
short短整型-32,768 到 32,7672 字节
unsigned short无符号短整型0 到 65,5352 字节
long长整型-2,147,483,648 到 2,147,483,6474 字节
unsigned long无符号长整型0 到 4,294,967,2954 字节
long long长长整型-9,223,372,036,854,775,808 到 9,223,372,036,854,775,8078 字节
unsigned long long无符号长长整型0 到 18,446,744,073,709,551,6158 字节
当使用unsigned数值无负数范围。

浮点类型

下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:

类型存储大小值范围精度
float4 字节1.2E-38 到 3.4E+386 位有效位
double8 字节2.3E-308 到 1.7E+30815 位有效位
long double16 字节3.4E-4932 到 1.1E+493219 位有效位
#include <stdio.h>int main() {int integer = 100;float floating = 12.34;double doubleNum = 123.456;printf("Integer: %d\n", integer);printf("Floating Point: %f\n", floating);printf("Double: %lf\n", doubleNum);return 0;
}

头文件 float.h 定义了宏,在程序中可以使用这些值和其他有关实数二进制表示的细节。下面的示例将输出浮点类型占用的存储空间以及它的范围值:

#include <stdio.h> 
#include <float.h>  
int main() {printf("float 存储最大字节数 : %lu \n", sizeof(float));printf("float 最小值: %E\n", FLT_MIN );printf("float 最大值: %E\n", FLT_MAX );   printf("精度值: %d\n", FLT_DIG );      return 0; 
}

%E 为以指数形式输出单、双精度实数,详细说明查看 C 库函数 - printf()。

当编译并执行上面的程序时,它会产生下列结果:

float 存储最大字节数 : 4 
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 6

二.枚举类型

枚举类型是一种特殊的基本类型,用于定义在程序中只能赋予其一定的离散整数值的变量。

#include <stdio.h>
enum color { red, green, blue };
int main() {enum color favoriteColor;favoriteColor = green;if (favoriteColor == red) {printf("红色");} else if (favoriteColor == green) {printf("绿色");} else {printf("蓝色");}return 0;
}

三.void 类型

void 类型指定没有可用的值。它用于三种情况:

  1. 函数返回为空。
  2. 函数参数为空。
  3. 指针指向 void。
#include <stdio.h>void printHello() {printf("Hello, World!");
}int main() {printHello();return 0;
}

四.派生类型

包括指针类型、数组类型、结构类型、共用体类型和函数类型。这些类型基于基本类型构建。

#include <stdio.h>
struct person {char name[50];int age;
};
int main() {struct person p1 = {"John Doe", 30};printf("Name: %s\nAge: %d\n", p1.name, p1.age);return 0;
}

五.类型转换

类型转换是将一个数据类型的值转换为另一种数据类型的值。

C 语言中有两种类型转换:

  • 隐式类型转换:隐式类型转换是在表达式中自动发生的,无需进行任何明确的指令或函数调用。它通常是将一种较小的类型自动转换为较大的类型,例如,将int类型转换为long类型或float类型转换为double类型。隐式类型转换也可能会导致数据精度丢失或数据截断。
  • 显式类型转换:显式类型转换需要使用强制类型转换运算符(type casting operator),它可以将一个数据类型的值强制转换为另一种数据类型的值。强制类型转换可以使程序员在必要时对数据类型进行更精确的控制,但也可能会导致数据丢失或截断。
隐式类型转换
int i = 100;
double result;
result = i / 30.0; //转换为double
显式类型转换
double d = 9.5;
int total = (int)d + 1; //转换为int类型

六.变量与常量

变量

变量是存储数据的内存空间的名称。它们的值在程序执行期间可以改变。变量根据其定义的位置和作用域可分为局部变量和全局变量。

局部变量

局部变量在函数或语句块(例如{}内)中定义,并且只能在该函数或语句块内部使用。它的生命周期从声明开始,到所在函数或语句块的结束。

void function() {int localVar = 10; // 局部变量     printf("%d\n", localVar); 
}

全局变量

全局变量在函数外部定义,通常在程序的顶部。全局变量的作用域是整个文件,也可以在其他文件中通过外部引用访问。它的生命周期贯穿整个程序的执行时间。

int globalVar = 20; // 全局变量  
void function() {     printf("%d\n", globalVar); 
}  
int main() {     function();     return 0; 
}

名称冲突

当局部变量和全局变量同名时,局部变量在其作用域内将优先被使用。

引入其他文件的全局变量

使用extern关键字可以在一个文件中访问另一个文件的全局变量。

示例
// 在另一个文件中定义的全局变量 
extern int g_val;

常量

常量是程序中值不变的元素。C 语言提供了多种定义常量的方法。

字面常量

字面常量是直接出现在程序中的值,如数字 10 或字符串 "hello"

const 常变量

const关键字用于定义其值不可改变的变量,注意其实还属于变量。

const int a = 1;

#define 标识符常量

使用#define预处理指令定义的常量。

#define MAX 100

枚举常量

枚举是一种定义命名的整型常量的方法。枚举的每个成员都代表一个常量。

enum Sex { 
// 默认值从零开始     
MALE, FEMALE, SECRET 
};  
enum Sex s = MALE;

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

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

相关文章

Datalog 否定逻辑规则

在编写Datalog程序中&#xff0c;常常需要使用到比较逻辑&#xff0c;我目前遇到了两种&#xff0c;记录如下&#xff1a; 对某个relation的否定 例如目前我有一个relation表示一个操作符是否是可交换的——canExchange(op : Oper)&#xff0c;我想对不可交换的操作符进行检查…

6 时间序列(不同位置的装置如何建模): GRU+Embedding

很多算法比赛经常会遇到不同的物体产生同含义的时间序列信息&#xff0c;比如不同位置的时间序列信息&#xff0c;风力发电、充电桩用电。经常会遇到该如此场景&#xff0c;对所有数据做统一处理喂给模型&#xff0c;模型很难学到区分信息&#xff0c;因此设计如果对不同位置的…

OC-NSNumber

前言 本篇文章介绍OC中的NSNumber 介绍 NSNumber是基本类型的对象表示 我们有时候无法直接使用基本类型&#xff0c;比如我们无法使用基本类型来填充NSArray数组。这个时候可以使用NSNumber NSNumber的初始化 NSNumber的初始化一般有三种方法&#xff0c;下面介绍&#xf…

芯课堂 | SWM34S系列驱动TFT-LCD显示模组应用基本注意事项

1、确认硬件的连接、包括电源、地、RGB 数据线、DCLK\DE\HSYNC\VSYNC 等&#xff0c;显示模组有 DISP、RESET、CS、SCL、SDA 等。 2、确认各电压的正常&#xff0c;包括电源&#xff0c;部分有 IOVCC、VGL、VGH、VCOM 等电压 3、如果应用的 TFT-LCD 模组非演示例程中已适配调…

动态血糖监测市场调研:预计2029年将达到13亿美元

血糖监测即是对于血糖值的定期检查。实施血糖监测可以更好的掌控糖尿病患者的血糖变化&#xff0c;对生活规律&#xff0c;活动&#xff0c;运动&#xff0c;饮食以及合理用药都具有重要的指导意义&#xff0c;并可以帮助患者随时发现问题&#xff0c;及时到医院就医。 动态血糖…

LinkedList源码

LinkedList源码 总结 LinkedList数据结构采用链表&#xff0c;内部封装了Node类&#xff0c;set方法先让Node的pre指针指向之前的last节点&#xff0c;然后判断头节点知否为空&#xff0c;如果为空则让first指针指向该节点&#xff0c;不过不为空则让尾节点的next指针指向该节…

Linux:动静态库的概念制作和底层工作原理

文章目录 动静态库基础认知动静态库基本概念静态库的制作库的概念包的概念 静态库的使用第三方库小结 动态库的制作动态库的使用动态库如何找到内容&#xff1f;小结 动态库加载库和程序都要加载可执行程序的地址问题地址问题逻辑地址和平坦模式绝对编址和相对编址与位置无关码…

vue2(Vuex)、vue3(Pinia)、react(Redux)状态管理

vue2状态管理Vuex Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它使用集中式存储管理应用的所有组件的状态&#xff0c;以及规则保证状态只能按照规定的方式进行修改。 State&#xff08;状态&#xff09;:Vuex 使用单一状态树&#xff0c;即一个对象包含全部的应用层…

高防IP如何保护服务器

首先我们要知道什么是高防IP~ 高防IP是指高防机房所提供的ip段&#xff0c;主要是针对互联网服务器遭受大流量DDoS攻击时进行的保护服务。高防IP是目前最常用的一种防御DDoS攻击的手段&#xff0c;用户可以通过配置DDoS高防IP&#xff0c;将攻击流量引流到高防IP&#xff0c;防…

[pytorch入门] 3. torchvision中的transforms

torchvision中的transforms 是transforms.py工具箱&#xff0c;含有totensor、resize等工具 用于将特定格式的图片转换为想要的图片的结果&#xff0c;即用于图片变换 用法 在transforms中选择一个类创建对象&#xff0c;使用这个对象选择相应方法进行处理 能够选择的类 列…

docker 镜像打包,离线部署

基于镜像 1.导出tar。save命令(-o&#xff1a;指向导出文件&#xff0c;也可以用”>“大于号替代) docker save nginx > nginx.tar 或者 docker save 镜像ID > nginx.tar2. 导入镜像 docker load -i nginx.tar 或者docker load < nginx.tar基于容器 1 、 打…

网络安全全栈培训笔记(57-服务攻防-应用协议RsyncSSHRDPFTP漏洞批量扫描口令拆解)

第57天 服务攻防-应用协议&Rsync&SSH&RDP&FTP&漏洞批量扫描&口令拆解 知识点&#xff1a; 1、服务攻防-远程控制&文件传输等 2、远程控制-RDP&RDP&弱口令&漏洞 3、文件传输-FTP&Rsyc&弱口令&漏洞 章节内容&#xff1a; …

Python实现分段函数求导+绘制函数曲线

代码如下&#xff1a; import sympy as sp import numpy as np import matplotlib.pyplot as plt from sympy.utilities.lambdify import lambdify# 定义符号变量 x sp.symbols(x) # expr sp.Piecewise((0,0< x < 5), (1, x > 5)) # 定义分段原函数 #-------------…

远程ssh 不通的原因之一

背景&#xff1a;我都想大喊一声&#xff0c;我上网是通的&#xff0c; ping网址是通的&#xff0c;ping www.baidu.com 是通的&#xff0c; 怎么都远程不了&#xff0c;报超时&#xff1b;嘿&#xff0c; 别人远程就能行。我都想挠头了。 目录 1. 先 ping 自己&#xff0c;…

manacher算法 求最长回文串

本题链接&#xff1a;用户登录 题目&#xff1a; 样例&#xff1a; 输入 aa1ABA1b 输出 5 思路&#xff1a; 根据题目意思&#xff0c;求出最长回文串&#xff0c;我们可以用模板 manacher 算法 求最长回文串。 manacher算法 求最长回文串 核心有两个步骤。 一、将字符串转化…

SpringBoot分片上传、断点续传、大文件极速秒传功能

前言 文件上传是一个老生常谈的话题了&#xff0c;在文件相对比较小的情况下&#xff0c;可以直接把文件转化为字节流上传到服务器&#xff0c;但在文件比较大的情况下&#xff0c;用普通的方式进行上传&#xff0c;这可不是一个好的办法&#xff0c;毕竟很少有人会忍受&#…

华为机试真题实战应用【算法代码篇】-图谱新词挖掘1(附python、C++和JAVA代码实现)

目录 题目描述 代码实现 Java python C++ 代码2 题目描述 小华负责公司知识图谱产品,现在要通过新词挖掘完善知识图谱新词挖掘: 给出一个待挖掘问题内容字符串Content和一人词的字符串word,找到content中所有word的新词。新词: 使用词word的字符排列形成的字符串。 请帮…

Hive 数仓及数仓设计方案

数仓(Data Warehouse) 数据仓库存在的意义在于对企业的所有数据进行汇总&#xff0c;为企业各个部门提供一个统一、规范的出口。做数仓就是做方案&#xff0c;是用数据治理企业的方案。 数据仓库的特点 面向主题集成 公司中不同的部门都会去数据仓库中拿数据&#xff0c;把独…

框架概述和MyBatis环境搭建

学习视频&#xff1a;1001 框架概述_哔哩哔哩_bilibili 目录 框架概述 1.1为什么要学 1.2框架的优点 1.3 当前主流框架 Spring框架 Spring MVC框架 MyBatis框架 ​编辑 Spring Boot框架 Spring Cloud框架 1.4 传统JDBC的劣势 MyBatis 2.1 MyBatis概述 ORM框架工作原…

分布式日志

1 日志管理 1.1 日志管理方案 服务器数量较少时 直接登录到目标服务器捞日志查看 → 通过 rsyslog 或shell/python 等脚本实现日志搜集并集中保存到统一的日志服务器 服务器数量较多时 ELK 大型的日志系统&#xff0c;实现日志收集、日志存储、日志检索和分析 容器环境 …