目录
一、数据类型
1.1数据类型的介绍
1.2各种数据类型的⻓度
1.3数据类型⻓度(sizeof操作符计算类型长度)
1.4数据类型的取值范围
二、变量及常量
2.1变量
2.1.1创建
2.1.2变量的分类
2.1.3全局变量和局部变量在内存中存储的位置
2.2常量
2.2.1 字面常量
2.2.2 const修饰的常变量
2.2.3 #define定义的标识符常量
2.2.4 枚举常量
三、强制类型转换
一、数据类型
1.1数据类型的介绍
字符型
char
[ signed ] char
unsigned char
整型
// 短整型
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 ]
浮点型
float
double
long double
布尔类型
C 语⾔原来并没有为布尔值单独设置⼀个类型,⽽是使⽤整数 0 表⽰假,⾮零值表⽰真。
在 C99 中也引⼊了 布尔类型 ,是专⻔表⽰真假的。
1 _Bool
布尔类型的使⽤得包含头⽂件 <stdbool.h>
布尔类型变量的取值是:true或者false
1#define bool _Bool
2
3#define false 0
4 # define true 1
1.2各种数据类型的⻓度
每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不 同,存储的数据范围就有所差异。
数据类型 32位 64位 打印格式
char 字符数据类型 1字节 1字节 %c、%s
short 短整型 2字节 2字节 %d
int 整型 4字节 4字节 %d
long 长整形 4字节 4字节(linux为8字节) %ld
long long 长长整形 8字节 8字节 %lld
float 单精度浮点型 4字节 4字节 %f
double 双精度浮点型 8字节 8字节 %lf
1.3数据类型⻓度(sizeof操作符计算类型长度)
sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof操作符数的类型⻓度的,单位是字节。
sizeof 操作符的操作数可以是类型,也可是变量或者表达式。
sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。
sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。
sizeof 的计算结果是 size_t 类型的。
📌 sizeof 运算符的返回值,C 语⾔只规定是⽆符号整数,并没有规定具体的类型,⽽是留给
系统⾃⼰去决定, sizeof 到底返回什么类型。不同的系统中,返回值的类型有可能是
unsigned int ,也有可能是 unsigned long ,甚⾄是 unsigned long long ,
对应的 printf() 占位符分别是 %u 、 %lu 和 %llu 。这样不利于程序的可移植性。
C 语⾔提供了⼀个解决⽅法,创造了⼀个类型别名 size_t ,⽤来统⼀表⽰ sizeof 的返
回值类型。对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是
unsigned long long 。
比如:
1.4数据类型的取值范围
其实每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间,有了丰富的类 型,我们就可以在适当的场景下去选择适合的类型。如果要查看当前系统上不同数据类型的极限值:
limits.h ⽂件中说明了整型类型的取值范围。
float.h 这个头⽂件中说明浮点型类型的取值范围。
为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使⽤这些常量。
• SCHAR_MIN , SCHAR_MAX :signed char 的最⼩值和最⼤值。
• SHRT_MIN , SHRT_MAX :short 的最⼩值和最⼤值。
• INT_MIN , INT_MAX :int 的最⼩值和最⼤值。
• LONG_MIN , LONG_MAX :long 的最⼩值和最⼤值。
• LLONG_MIN , LLONG_MAX :long long 的最⼩值和最⼤值。
• UCHAR_MAX :unsigned char 的最⼤值。
• USHRT_MAX :unsigned short 的最⼤值。
• UINT_MAX :unsigned int 的最⼤值。
• ULONG_MAX :unsigned long 的最⼤值。
• ULLONG_MAX :unsigned long long 的最⼤值。
二、变量及常量
2.1变量
2.1.1创建
变量在创建的时候就给⼀个初始值,就叫初始化。
1 data_type name;
2 | |
3 | |
4 数据类型 变量名
2.1.2变量的分类
• 全局变量:在⼤括号外部定义的变量就是全局变量
• 局部变量:在⼤括号内部定义的变量就是局部变量
注意 :当局部变量和全局变量同名的时候,局部变量优先使⽤。
打印的结果为 “10”
2.1.3全局变量和局部变量在内存中存储的位置
内存中的三个区域:栈区、堆区、静态区。
1. 局部变量是放在内存的栈区
2. 全局变量是放在内存的静态区
3. 堆区是⽤来动态内存管理的 (还没学。后期补)
2.2常量
(摘抄自-蒋灵瑜的笔记本)
2.2.1 字面常量
例:3.14、100、‘w’、"abc"等
strlen求字符数组的长度
字符串的结束标志是转义字符’\0’,strlen遇到’\0’即返回。
2.2.2 const修饰的常变量
例:const int a=100;//在C语言中,const修饰的a,本质是变量,但是不能直接修改,有常量的属性。
2.2.3 #define定义的标识符常量
例:#define MAX 1000
#define STR “abcd”
2.2.4 枚举常量
三、强制类型转换
在操作符中还有⼀种特殊的操作符是强制类型转换,语法形式很简单,形式如下
(类型)
//请看代码:
int a = 3.14;//a的是int类型, 3.14是double类型,两边的类型不⼀致,编译器会报警告
//为了消除这个警告,我们可以使⽤强制类型转换:
int a = (int)3.14;//意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分
强制类型转换都是万不得已的时候使用,如果不需要强制类型转化 就能实现代码,⾃然更好。