1.数据类型
所谓类型,就是相似的数据所拥有的共同特征,也是对数据存储单元的安排,包括存储单元的长度以及数据的存储形式。不同的类型分配不同的长度和存储形式。编译器只有知道了数据的类型,才知道怎么操作数据。
1.1 signed 和 unsigned
在介绍C语言数据类型前,先引入两个关键字:signed 和 unsigned。
在C语言中使用signed 和 unsigned 关键字修饰字符型和整型类型。
signed 关键字,表示一个类型,带有正负号,包含负值(比如:海拔、温度...);
unsigned 关键字,表示该类型不带有正负号,只能表示零和正整数(比如:年龄、身高、体重..)。
-
signed 的使用:
对于int 类型,默认是带有正负号的,也就是说 int 等同于 signed int。由于这是默认情况,关键字signed一般省略不写,但是写了也不算错。
举例:
signed int a ;
// 等同于 int a ;
-
unsigned 使用的:
当 int 类型只表示非负整数,这时就必须使用关键字unsigned申明变量。
比如:
unsigned int a ;
unsigned int 里面的 int 也可以省略,所以上面的变量声明也可以写成:
unsigned a ;
说明:
(1)只有整型和字符型数据可以加signed 和 unsigned 修饰符,实型数据不能加。
(2)对无符号整型数据用 " %u "格式输出,有符号的整型数据用 " %d "格式输出。
1.2 基本类型
-
整型
(1)短整型(short int)
short [ int ] // 方括号[ ] 表示其中的内容是可选的,既可以有,也可以没有[ signed ] short [ int ]unsigned short [ int ]
(2)整型(int)
int[ signed ] intunsigned int
(3)长整型(long int)
long [ int ][ signed ] long [ int ]unsigned long [ int ]
(4)更长整型(long long int)
long long [ int ][ signed ] long long [ int ]unsigned long long [ int ]
-
字符型
char //character[ signed ] char // 有符号的unsigned char // ⽆符号的
-
浮点型
(1)单精度浮点型: float
(2)双精度浮点型:double
(3)长双精度浮点型 :long double
-
布尔型
布尔类型:_Bool ,是专门表示真假的,整数零表示假,非零值表示真。
_Bool flag = true ;
bool flag = false;
布尔类型变量的取值是 ture 或者 false,布尔类型的使用需要包含头文件 <stdbool.h>
注意:C语言中使用整数0表示假,非零值表示真.
1.3 各种数据类型的长度
每一种数据类型都有自己的长度,这些类型占据的字节长度是不同的。我们用sizeof操作符来计算这些类型的长度,单位是字节。
接下来我们就用sizeof操作符在VS2019 X86配置上 计算数据类型长度:
大家肯定很疑惑为什么 int 类型和 long int类型的长度一样?
这是因为C标准没有具体规定各种类型所占用存储单元的长度,这是由个编译系统自行决定的。C标准只要求 long 型数据长度不短于 int 型,short 型不长于 int 型。即:
sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(long long)
2.常量和变量
2.1常量
在程序运行过程中,其值不能被改变的量称为常量。
常量有以下几种类型:
(1)整型常量。如1235,1000,-329等。
(2)实型常量。
①小数形式:2.198,-1.23, 0.64等。
②指数形式:12.34e3(代表12.34×10³)等。
(3)字符常量。'a','2','?',用单撇号括起来的一个字符。
(4)字符串常量。"girl","123456",字符串常量是双撇号中的全部字符(不包含双撇号本身" ")。
(5)符号常量:用#define 指令定义的标识符常量。
#define PI 3.14159
在文件中从此行开始所有的PI都代表3.14159。在对程序进行编译前,预处理器先对PI进行处理,把所有PI全部置换为3.14159。这种用一个符号名代表一个常量的,称为符号常量。
2.2 变量
在程序运行过程中,经常变化的值称为变量。变量必须先定义,后使用。
2.2-1 变量创建的基本语法:
data_type name;
数据类型 变量名
例如:
int age; //整型变量
char ch; //字符变量
double weight; //浮点型变量
变量的名字要根据实际情况的需要,起一个有意义的名字。
变量命名的一般规则:
- 只能有字母(包括大写和小写)、数字和下划线组成
- 不能以数字开头
- 长度不能超过63个字符
- 变量名中区分大小写
- 变量名不能使用关键字
2.2-2 初始化
变量在创建的时候就给一个初始值,就叫初始化。如果变量不初始化,它里面存放的是随机值,当进行操作时,变化成什么值,我们也是不可控的。
int age = 18;
char ch = ' y ';
double weight = 44.2;
这些数据类型可以直接用来定义变量,变量就是可以改变的对象,这些变量的值也是可以修改的,请看下面代码:
2.2-3 变量的分类
全局变量:在大括号外部定义的变量就是全局变量。全局变量的使用范围更广,全局变量的作用域是整个文件。
局部变量: 在大括号内部定义的变量就是局部变量。局部变量的使用范围是比较局限的,只能在自己所在的局部范围内使用。
在第9行定义全局变量,全局变量的作用域是整个文件。 又在第13行定义了局部变量local。
当全局变量和局部变量名字相同时,会怎么样?
程序运行,执行结果如下:
这就说明当局部变量与全局变量同名时,局部变量的值会将全局变量的值覆盖。也就是说当局部变量与全局变量同名时,局部变量优先使用。
2.2-4 变量的存储方式
内存中供用户使用的存储空间可以划分为三个部分:栈区、堆区、静态区。
- 局部变量是放存在内存的栈区,在调用其所在函数时临时分配存储单元,在函数调用结束后该存储单元就会被马上释放,变量就不存在了。
- 全局变量是存放在内存党的静区,在程序执行过程中占据固定的存储单元。
作为初学者可能讲解的比较片面,接下来会在逐步学习的过程中再深入讲解,若有错误请指正!今天的学习内容到此结束啦,希望和大家一起进步!