数据类型
在C语言中,我们有很多数据类型
那么我们不禁思考:
1.为什么有这么多数据类型
2.他们的大小是多少?他们都有什么用?
的确,这是一些不错的问题,
先来看这样一段代码:(sizeof是一个求大小的关键词,以后会详细介绍)
printf("%d\n", sizeof(char)); 1
printf("%d\n", sizeof(short)); 1
printf("%d\n", sizeof(int)); 4
printf("%d\n", sizeof(long)); 4
printf("%d\n", sizeof(long long)); 8
printf("%d\n", sizeof(float)); 4
printf("%d\n", sizeof(double)); 8
printf("%d\n", sizeof(long double)); 8
那么打印出来的结果是什么呢?
继续来看
分别对应是1 1 4 4 8 4 8 8
看到这里大家肯定有疑惑,这一串数字代表什么含义?单位是什么?是1年?1爽? 还是什么?
好像并不知道
因为计算机只能够识别二进制,二进制中只有1/0(正负电),当我们要存储一个1/0(二进制)的时候,我们就需要计算机来开辟一块空间,用来存放我们的0/1,那么我们此时一个1/0所占的大小是多少呢?
就是:
一个比特位bit
那么我们在上面算出的一系列的数字又是以什么为单位的呢?
答案是:
字节byte
在计算机内存中,最小的单位是bit(比特位,)还有,byte、kb、mb、gb等等,他们都是计算机内存中的储存单位
附上换算比例:
所以,我们就知道了:当我要存储一个int类型的变量时,我们就要从内存上分配4个字节的空间来储存这个变量,那么这就是上方计算出的4,在这里指的是这个类型所占空间的大小
变量vs常量
生活中的有些值是不变的(比如:圆周率,性别(?),身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资)。
不变的值,C语言中用常量的概念来表示,变得值C语言中用变量来表示。
定义变量的方法
int age = 150;
float weight = 45.5f;
char ch = 'w';
变量的定义
上面我们提到了,当我们创建一个变量时
例如:int a=10;
可以从右向左看 10 -> = -> a
本质含义是: 将10 通过=(赋值操作符) 赋给了a,所以使a=10
根据我们上面所说的数据类型,我们创建的变量一定是有一个类型的,在这里是int类型(整型变量)
变量的作用域和生命周期
作用域是指:
作用域(scope),程序设计概念,通常来说,一段程 序代码中所用到的名字并不总是有效/可用 的
而限定这个名字的可用性的代码范围就是这个名字的作用域。
并且要注意:
1. 局部变量的作用域是变量所在的局部范围。
2. 全局变量的作用域是整个工程。
而生命周期是指:
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
**注意:
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期**
局部变量 vs全局变量
如果说局部变量是:在main函数中定义的变量 这个说法是否有问题?
的确有!
void game()
{
int a = 0;
}
int main()
{
int b=10;
}
其实这个谈到了生命周期这个概念,
1.定义在代码块{}中的变量称为局部变量 (局部变量的生命周期是当前代码块内)
2.定义在代码块外部的变量称为全局变量(全局变量的生命周期是整个文件)
并且,在同一个范围内不可以重复定义同一个变量
再看一段代码
int a = 100;
(这里的a是一个全局变量)
int main()
{
int a = 10;
printf("%d", a);
return 0;
}
思考一下,当全局变量和局部变量的命名相同时,我们打印出来的a会等于几呢?
不要着急看答案~先自己思考10s
答案是10
通过这个答案我们可以知道,当全局变量和局部变量命名相同时,打印的值是局部变量,怎么思考这个问题呢?在上面我们学习到了变量的定义,那么我们就可以形象的把a看做一个容器
我们这里就可以把a看做一个容器,第一次给了一个10,他就等于10,但是当我放了一个20进去的时候,20把10给压死了 覆盖掉了(通过赋值操作符‘=’),所以此时a=20;同理 当全局变量等于100,进入局部变量时,被10覆盖掉了,这样是不是就想通了?