数据类型
在计算机高级语言中,数据有两种表现形式:变量和常量。
变量
变量代表一个有名字的、具有特定属性的一个存储单元。它用来存放数据,也就是存放变量的值。在程序运行期间,变量的值是可以改变的。变量必须先定义,后使用。在定义时应该指定变量的名字和类型。
C语言要求在定义所有的变量时都要指定变量的类型。所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式。
C语言允许使用的基本数据类型有以下几种。之所以将数据类型细分,是为了合理分配内存。
char //字符数据类型
short //短整型
int //整型
long //长整型
long long //更长的整型
float //单精度浮点数
double //双精度浮点数
那么每种数据类型的大小是多少呢?
#include<stdio.h>
int main()
{
printf("%d\n", sizeof(char ));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
return 0;
}
程序运行结果如下:
由以上结果可知,编译系统分配给char型数据1个字节,分配给int型数据2个字节,以此类推。在计算机中,1个字节(byte)是8个比特位(bite),即8个二进制位,1kB = 1024个字节,1MB = 1024kB,GB、TB同理。
C语言没有具体规定各种类型数据所占用存储单元的长度,这是由各编译系统自行决定的。C语言只要求long型数据长度不短于int型,short型不长于int型。即 sizeof(short)≤sizeof(int)≤sizeof(long)≤sizeof(long long) 。
变量的分类
- 局部变量
- 全局变量
#include<stdio.h>
int global = 2019; // 全局变量
int main()
{
int local = 2018; // 局部变量
int global = 2020; // 局部变量
printf("global = %d\n",global);
return 0;
}
程序运行结果如下:
上述程序定义了两次global变量,第一次是全局变量,第二次是局部变量,而程序的运行结果,global的值为2020,说明当局部变量和全局变量同名时,局部变量优先使用。当然,局部变量和全局变量的名字建议不要相同。
变量的作用域和生命周期
- 作用域
作用域是程序设计概念。通常来说,一段代码中所用到的名字并不总是有效的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
(1). 局部变量的作用域是变量所在的局部范围。
(2). 全局变量的作用域是整个工程。 - 生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
(1). 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
(2). 全局变量的生命周期是:整个程序的生命周期。
常量
C语言的常量分为以下几种:
- 字面常量
- const修饰的常变量
- #define定义的标识符常量
- 枚举常量
#include<stdio.h>
// 举例
enum Sex
{
MALE,
FEMALE
};
// 括号中的MALE,FEMALE是枚举常量
int main()
{
// 字面常量
3.14;
1000;
// const修饰的常变量
const float pai = 3.14f;
// #define的标识符常量
#define MAX 100
printf("max = %d\n", MAX);
// 枚举常量演示
printf("%d\n", MALE);
printf("%d\n", FEMALE);
// 枚举常量默认是从0开始的,依次向下递增1
}
程序运行结果如下:
上面例子的pai被称为const修饰的常变量,const修饰的常变量在C语言中只是在语法层面限制了pai不能被直接改变,但是pai本质上还是一个变量的,所以叫常变量。