【初识C语言之数据类型】


 前言

什么是数据类型呢?顾名思义应该是数据的种类,例如年份、年龄这些都会用整数来表示,问到这些我们不会用比如:2024.5年、20.85岁这样的数值来表示;然而像温度、身高体重这些的表示又会用到小数来表示。我们观察这些数据可以发现他们都会有独有的特征,整数只有数字,小数呢都会有一个小数点等等。那么C语言中的数据类型又是啥样的?下面我们来一块看看!


 

一.C语言中的数据类型


以上图片里看到的就是C语言所提供的各种数据类型

二.内置类型
 

1.字符型


C语言里字符型用(char)来表示,分为 [signed]char  (用[ ]阔起来的可以省略不写) 和 unsigned char[signed]char表示有符号字符型、unsigned char表示无符号字符型。既然 [signed]char 可以写成char那么 [signed]char 就等于char吗?答案是:可能是的,他们是否相等取决于所用的编译器!

2.整形


在C语言里整形又被分成哪些呢?
整形分成了:
                  >短整形:  short[int]有符号的短整形[signed]short[int]无符号的短整形 unsigned short[int]
                  >整形:      int有符号的整形[signed]int无符号的整形unsigned int
                  >长整形:  long [int]有符号的长整形[signed]long[int]无符号的长整形unsigned long[int]
                  >更长的整形(在C99标准中引入):long long [int]有符号的更长整形[signed]long long[int]无符号的更长整形unsigned long long[int]
                 
 同样[ ]中的内容可以省略不写,那么这些中的[signed]short[int]和short[signed]int和int[signed]long[int]和long[signed]long long[int]和long long,是否相等呢?答案是:是的,不加signed会默认是有符号型的。

3.布尔类型

布尔类型(_Bool)是在C99标准中引入的,专门用来表示真假;在此之前C语言是用0表示假,非0表示真。

布尔类型的使用需要包含头文件<stdbool.h>

布尔类型变量的取值是:ture(真)或者false(假)

通过查看stdbool.h这个头文件我们可以更直观的看到!

下面我们通过代码演示来看看:

if( )语句括号内的表达式为真则执行语句,为假则会跳过语句。flag初始化为false时未打印内容,说明flag为假;也能说明false为假。


4.浮点型 

在C语言中浮点型分为单精度浮点型(float)双精度浮点型(double)、长的双精度浮点型(long double),double型的浮点数的精度更高;但是在浮点数在计算机中都不能精确保存!


三.自定义类型

1.数组

什么是数组呢?数组是一种相同类型元素的集合,由此我们可以发现一个数组中的元素至少都会大于等于1个,并且它们都必须是相同类型的。数组又分为一维数组和多维数组,其中一维数组和二维数组较为常用。

下面举例出一些数组:

int arr[10]、char ch[5]、float score[20]、double arr1[15] 、int coordindate[10][10]......

那这些数组的类型又是什么呢?其实把他们的数组名去掉就是他们的类型

>   int arr[10] 的类型为:int [10]    

>   char ch[5]的类型为:char [5]

>   float score[20]的类型为:float [20]

>  double arr1[15]的类型为:double [15]

>   int coordindate[10][10]的类型为:int [10][10]

2.结构体

结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量;说到结构体还得要说C语言中的一个关键字“struct",需要创建结构体就需要用到这个关键字。那么结构体又是用来干什么的呢?我们以一个现实生活中的例子来说,我们要描述一个学生的信息一般需要描述姓名、性别、年龄等等;可以发现这些信息并不都是同一个类型的,那么我们该怎样来储存它们呢?结构体便能满足我们的需求!

例如:

我们可以看到用结构体struct student创建的变量s可以满足我们要保存学生信息的需求,那么这个结构体的类型又是什么呢?我们是用数据类型来创建变量的,那么这个struct student就应该是这个结构体的类型

由此我们可以推断是不是结构体的类型都是struct开头的呢?好像没什么问题,不过有点麻烦每次拿起结构体创建变量都要写这个struct;这里我们在来看另外一个关键字“typedef”

typedef是类型重命名的意思,我们可以用这个关键字把上面struct student的类型名重新命名成student,这样我们拿起结构体创建变量的时候就会变的方便一些。利用typedef这个关键字我就可以把一些较长的结构体类型名重新命名成简短的,就能解决上面说的麻烦的问题。

3.枚举

什么是枚举呢?顾名思义应该是一个一个的列举出来,这里又会专门用到一个关键字“enum”

上面定义的 enum months 、enum color 这些都是枚举类型

4.联合体


联合体类似于结构体,也是由⼀个或者多个成员构成,这些成员可以不同的类型;但是编译器只为联合体的最⼤的成员分配⾜够的内存空间,所以联合体所有成员共⽤同⼀块内存空间,也称为共用体联合体使用关键字“union”

上面定义的 union Un1、union Un2,都是联合体的类型

四.整形家族和浮点型家族

什么是整形家族呢?什么又是浮点型家族呢?字面意思看已经能告诉我们大部分信息了,浮点型家族应该就是包括浮点型吧!确实C语言中把float型、double型、long double型归为浮点型家族。那这样整形家族肯定就是整形了吧!那么真的是这样的吗?答案是:不够完整,C语言中把字符型、整形、布尔类型都归为整形家族。

下面我们来了解一下为什么,我们用一段代码来看看:

既然它们都是整形家族里的,那我们就用打印整形的%d来打印它们,我们发现打印出来的结果居然都是整数!这是为什么呢?原来字符是以ASCII码值储存在计算机中的,而布尔类型里的true和false分别被定义为了1和0;它们都是整数所以才将它们都到整形家族里面。

(关于ASCII码有专门的表格,感兴趣可以查看https://zh.cppreference.com/w/cpp/language/ascii)

五.内置数据类型的长度及取值范围

说到长度这里又得提到一个关键字“sizeof”,同时它也是一个操作符;专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字节。它的操作数可以是类型、变量或者表达式。下面我们一块来看看

(在vs2022 x86配置下的输出)

我们可以看到各个数据类型的长度分别为:

char :1字节;    short :2字节;      int : 4字节;    long :4字节;    long long :8字节;

float :4字节;    double :8字节;   long double :8字节;      bool :1字节

这些类型的取值范围分别又是多少呢?通过查看limits.h、float.h这两个头文件我们便可以看到这些类型的取值范围

>字符型:

>整形:

>浮点型:

我们在知道了内置各种类型的取值范围后,能够更好的帮助我们根据不同场景的需求来合适的选择C语言为我们提供的这些内置类型。

结语

本次的探究就到这里啦,非常感谢您能够看到最后;本人是C语言的初学者如果上面有说到不对的地方还请大家指正,以免误导别人。如果此文章对您有些许帮助,本人荣幸至极!再次感谢您的阅读!
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值