1、数据类型
1.1字符型
字符英文单词是character,在C语言中 char 表示字符类型。
char字符型------1字节 [signed] char//有符号的 unsigned char//无符号的1.2整型
整数英文单词integer,在C语言中 int 表示整型。
//短整型------2字节 short [int] [signed] short [int] unsigned short [int] //整型------4字节 int [signed] int unsigned int //长整型------4字节 long [int] [signed] long [int] unsigned long [int] //更长的整型 C99中引入------8字节 long long [int] [signed] long long [int] unsigned long long [int]1.3浮点型
float//单精度浮点型------4字节 double//双精度浮点型------8字节 long double------8字节1.4布尔类型
C99中引入布尔类型--------1字节,专门表示真/假的变量。
C语言本来没有布尔类型,使用0表示假,非0表示真。
布尔类型使用必须包含头文件<stdbool.h>,取值是true或false。
#include <stdio.h> #include <stdbool.h> int main() { //_Bool flag1 = true; //_Bool flag2 = false; //#define bool _Bool bool flag1 = true; bool flag2 = false; if (flag1) printf("hehe\n");//打印 if (flag2) printf("haha\n");//不打印 return 0; }2各种数据类型的长度
每种数据类型都有自己的长度,不同数据类型能创造出不同长度的变量,变量长度不同,存储数据的范围也不同
2.1sizeof 操作符
- sizeof是一个关键字,也是一个操作符,专门用来计算类型长度,单位是字节。
- sizeof(类型) sizeof 表达式——其操作数可以是类型,也可以是变量或者表达式。类型要有括号,表达式可以省略括号。
- sizeof后面的表达式不是真实参与计算的,根据表达式类型得出类型长度
- sizeof的计算结果是size_t类型,size_t类型的数据打印是使用%zu
int main() { int a = 10; printf("%zu\n", sizeof(a)); 4 printf("%zu\n", sizeof a); 4 printf("%zu\n", sizeof(int)); 4 printf("%zu\n", sizeof(3 + 3.5)); 8 return 0; }计算机能识别的是二进制,存储一个二进制位需要的空间是1个比特位(1bit)
1Byte(字节) == 8bit(比特),1KB(千字节)== 1024B,1MB(兆字节)== 1024KB
1GB(吉字节)== 1024MB, 1TB(太字节)== 1024GB
参考资料:https://en.cppreference.com/w/c/language/arithmetic_types.html#.E6.95.B0.E6.8D.AE.E6.A8.A1.E5.9E.8B
2.2signed和unsigned
C语言使用signed和unsigned关键字修饰 字符型和整型类型。
- signed 关键字,表示一个类型带有正负号,包含负值
- unsigned 关键字,表示该类型不带正负号,只能表示零和正数
- 对应int类型,默认是带正负号的,关键字signed一般都省略不写
- char 类型默认是否带正负号,由当前系统决定,char可能是signed char(大部分是这个),也可能是 unsigned char,这一点与int不同,int 默认为 signed int
- 字符类型也属于整型,字符的本质是ASCll值
- size_t是无符号的整型类型
3.变量
3.1变量的创建
类型是用来创建变量的,C语言中把经常变化的值称为变量,不变的值称为常量
变量创建的语法形式
data_type name | | | | 数据类型 变量名变量命名规则
- 只能由字母(大小写)、数字、下划线(‘_')组成
- 不能以数字开头
- 长度不能超过63个字符
- 变量中区分大小写
- 变量名不能使用关键字,变量名最好有意义
- 变量在创建时给一个初始值,叫做初始化(与赋值区分)
- 创建变量时最好给一个值,将它初始化,局部变量不初始化,编译器会给一个未知的值或者报错。
int main() { int age = 0;//初始化 float scores; scores = 20.0f;//f表示单精度浮点数,赋值 return 0; }3.2变量的分类
- 全局变量:在大括号外部定义的变量(全局变量使用范围更广,整个工程要使用都可以)
- 局部变量:在大括号内部定义的变量(使用范围比较局限,只能在自己所在的局部范围内使用)
- 全局变量如果不初始化,编译器会指定为0;局部变量不初始化,编译器会给未知值。
int d = 100;//全局变量 int main() { //局部变量 int a = 10; int b = 20; printf("%d", a); printf("%d", d); return 0; }- 当全局变量和局部变量名字相同时,局部变量优先
变量创建的本质是向内存申请空间,全局变量和局部变量在内存存储在哪里呢?
内存分为三个区域:栈区、堆区、静态区
1、局部变量、函数参数 放在栈区
2、全局变量、静态变量 放在静态区
3、堆区是用来动态内存管理的(mallloc、calloc、realloc、free)