c语言学习之数据类型总结

数据类型

基本类型

在数据类型的基础上,可使用前缀符号装饰

装饰符意义
unsigned无符号,即值范围均不小于0
signed有符号,即值范围为正负对称,其中最小负数的绝对值比最大正数大1,数据类型默认使用signed
long扩大存储数据的内存,一般是原数据储存大小的2倍
short用于区别long,一般是保持原数据储存大小,数据类型默认使用short

查询变量存储大小的方法:sizeof(var|type)

整数类型
类型储存大小值范围
int4字节[ − 2 4 × 8 2 -\frac{2^{4\times8}}{2} 224×8, 2 4 × 8 2 − 1 \frac{2^{4\times 8}}{2}-1 224×81]
unsigned int4字节[0, 2 4 × 8 − 1 2^{4\times 8}-1 24×81]
long int8字节[ − 2 8 × 8 2 -\frac{2^{8\times8}}{2} 228×8, 2 8 × 8 2 − 1 \frac{2^{8\times 8}}{2}-1 228×81]
unsigned long int8字节[0, 2 8 × 8 − 1 2^{8\times 8}-1 28×81]
char1字节[ − 2 8 2 -\frac{2^{8}}{2} 228, 2 8 2 − 1 \frac{2^8}{2}-1 2281]
unsigned char1字节[0, 2 8 − 1 2^8-1 281]
浮点类型
类型储存大小值范围精度
float4字节[ 1.2 × 1 0 − 38 1.2\times{10^{-38}} 1.2×1038, 3.4 × 1 0 38 3.4\times{10^{38}} 3.4×1038]6位小数
double8字节[ 2.3 × 1 0 − 308 2.3\times{10^{-308}} 2.3×10308, 1.7 × 1 0 308 1.7\times{10^{308}} 1.7×10308]15位小数
long double16字节[ 3.4 × 1 0 − 4932 3.4\times{10^{-4932}} 3.4×104932, 1.1 × 1 0 4932 1.1\times{10^{4932}} 1.1×104932]19位小数

枚举类型

用途:存储一系列的离散值
定义格式:enum 枚举名 {枚举元素1,枚举元素2,...,枚举元素n};
枚举变量的定义格式

  • enum 枚举名 {枚举元素1,枚举元素2,...,枚举元素n} 枚举变量名;
  • enum {枚举元素1,枚举元素2,...,枚举元素n} 枚举变量名;
  • enum 枚举名 {枚举元素1,枚举元素2,...,枚举元素n};
    enum 枚举名 枚举变量名; 
    

注意

  • 枚举变量属于编译器直接编译到命令里的,不是保存在数据区的内存中,不能通过&取枚举变量的地址。
  • 枚举变量元素属于全局变量,不能再定义和其重名的变量。
  • 枚举元素属于常量,不能对它们进行赋值

void类型

void类型指定没有可用的值,在C中主要有三种情况。

类型意义
函数返回为空当函数没有返回值时,这种类型的函数就是空类型。
函数参数为空当函数不接受任何参数时,这种函数就是可接受一个空类型。
指针指向为空在动态分配内存时,仅返回所在内存的地址,内存存放数据的类型暂时不知,这是就可以将该指针指向空类型,后续可以转换为任意类型。

派生类型
指针类型

在计算机中,任何数据都存储在内存中,每个存储位置都有一个唯一的编号,即地址。在C语言中,我们可以通过&运算符来获取数据存储在内存中的地址。将所获取的地址存储在一个新的变量中,而这个新的变量,我们称之为指针。
指针定义
指针变量的定义格式:type *指针变量名=NULL;
获取指针所指向变量的值的格式:*指针变量名


数组类型

程序所使用的数据都是存储在内存中,每种数据的在内存中的存储方式也是不相同的。其中,将内存中的一个固定大小区域, 按顺序存储一系列数据类型相同的数据,这个内存块的数据整体,称之为数组,数组名则是指以该内存块的首地址为值的变量,即是指针类型。
数组变量的定义格式:type 数组名[数组大小];
初始化数组:type 数组名[数组大小n] = {元素0, 元素1,...,数组n-1};
注意: 如果未初始化数组,数组的元素将由系统随机分配;如果只是初始化部分数组元素,其余元素将由系统随机分配;数组的索引从0开始,到n-1结束。
访问数组:

  • 基于数组的方法:数组名[索引]
  • 基于指针的方法:*(数组名+索引)

字符串类型

指定内存中的一个固定大小区域, 按顺序存储一系列字符类型的数据,这个内存块的数据整体,称之为字符串类型,其本质是数组。
定义格式:char 字符串名称[字符串长度+1];
字符串变量初始化:

  • char 字符串名称[字符串长度+1]={元素0,元素1,...,元素n-1,'\0'};
  • char 字符串名称[]="xxxxxxx";

在c语言中,’x‘表示一个字符,“x”表示一个字符串。


结构体类型

在内存中划定一个固定大小的区域,指定内存中存储数据的类型和顺序,这个内存块的数据整体,称之为结构体。结构体的长度并不是简单地将结构体地所有成员相加,最终的长度必须是所有成员的公倍数具体可参考
定义格式:

struct 结构体名称
{
	type var_name;
	type var_name;
	.
	.
	.
};  

结构体变量的定义格式:

struct 结构体名称
{
	type var_name;
	type var_name;
	.
	.
	.
}; 
struct 结构体名称 结构体变量名;
struct 结构体名称
{
	type var_name;
	type var_name;
	.
	.
	.
} 结构体变量名;  
struct 
{
	type var_name;
	type var_name;
	.
	.
	.
} 结构体变量名;  

结构体变量初始化:

struct 结构体名称{
	type_1 var_1;
	type_2 var_2;
};
struct 结构体名称 结构体变量名={value_1, value_2};
struct 结构体名称{
	type_1 var_1;
	type_2 var_2;
};
struct 结构体名称 结构体变量名;
结构体.var_1 = value_1;
结构体.var_2 = value_2;

访问结构体变量成员,使用.

struct 结构体名称{
	type_1 var_1;
	type_2 var_2;
} 结构体变量名={value_1, value_2};
if (结构体.var_1 == 结构体.var_2)
	printf("True");

如果使用指针指向结构体,例如struct 结构体名称 *指针名称,此时要访问结构体元素,需要使用->运算符,例如指针名称->var_1


共用体类型

在相同的内存位置上,根据需求,可以存储不同的数据类型,但是同一时间,仅能存储一种数据类型,这种数据类型成为共用体类型。共用体类型和结构体类型很容易混淆,他们的主要区别在于共用体的所有成员共用一个地址,同一时间内只能出现一个成员,共用体的长度等于所有成员中的最大长度具体可参考
定义格式:

union 共用体名称
{
	type var_name;
	type var_name;
	.
	.
	.
};  

共用体变量的定义格式:

union 共用体名称
{
	type var_name;
	type var_name;
	.
	.
	.
}; 
union 共用体名称 共用体变量名;
union 共用体名称
{
	type var_name;
	type var_name;
	.
	.
	.
} 共用体变量名;  
union 
{
	type var_name;
	type var_name;
	.
	.
	.
} 共用体变量名;  

访问共用体变量成员,使用.

union 共用体名称{
	type_1 var_1;
	type_2 var_2;
} 共用体变量名;
printf("%s", 共用体变量名.var_1);

函数类型

除了main函数外,我们可以根据自己的需求,自定义函数,即函数类型;
定义格式:

return_type 函数名(type_1 var_1, type_1 var_2)
{
	statments;
	return var;
}

函数变量的定义格式:type 函数名(type_1 var_1, type_1 var_2);


致谢
本文主要参考菜鸟教程,在此表示感谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值