给小白讲变量和数据类型
在《数据在内存中的存储形式》一节中讲到:
我们不妨先从最简单的整数说起,看看它是如何放到内存中去的。
C语言中这样在内存中找一块区域:
这个语句的意思是:在内存中找一块区域,命名为 a,用它来存放整数。
C语言中这样向内存中放整数:
把上面的两个语句连起来:
因为 a 的值可以改变,所以我们给它起了一个形象的名字,叫做变量(Variable)。
你可以先定义变量,再初始化,例如:
我们知道,诸如数字、文字、符号、图形、音频、视频等数据都是以二进制形式存储在内存中的,它们并没有本质上的区别,那么,00010000 该理解为数字 16 呢,还是图像中某个像素的颜色呢,还是要发出某个声音呢?如果没有特别指明,我们并不知道。
也就是说,内存中的数据有多种解释方式,使用之前必须要确定;上面的
顾名思义,数据类型用来说明数据的类型,确定了数据的解释方式,让计算机和程序员不会产生歧义。在C语言中,有多种数据类型,例如:
这些是最基本的数据类型,是C语言自带的,如果我们需要,还可以通过它们组成更加复杂的数据类型,后面我们会一一讲解。
多个数据在内存中是连续存储的,彼此之间没有明显的界限,如果不明确指明数据的长度,计算机就不知道何时存取结束。例如我们保存了一个整数 520,它占用 4 个字节的内存,而读取时却认为它占用 3 个字节或 5 个字节,这显然是不正确的。
所以,在定义变量时还要指明数据的长度。而这恰恰是数据类型的另外一个作用。数据类型除了指明数据的解释方式,还指明了数据的长度。因为在C语言中,每一种数据类型所占用的字节数都是固定的,知道了数据类型,也就知道了数据的长度。
在 32 位环境中,各种数据类型的长度一般如下:
C语言有多少种数据类型,每种数据类型长度是多少、该如何使用,这是每一位C程序员都必须要掌握的,后续我们会一一讲解。
变量名不仅仅是为数据起了一个好记的名字,还告诉我们数据存储在哪里,使用数据时,只要提供变量名即可;而数据类型则指明了数据的长度和处理方式。所以诸如
C语言提供的多种数据类型让程序更加灵活和高效,同时也增加了学习成本。而有些编程语言,例如 Python、JavaScript、PHP 等,在定义变量时不需要指明数据类型,编译器会根据赋值情况自动推演出数据类型,更加智能。
最后需要说明的是:数据类型只在定义变量时指明,而且必须指明;使用变量时无需再指明,因为此时的数据类型已经确定了。
- 计算机要处理的数据(诸如数字、文字、符号、图形、音频、视频等)是以二进制的形式存放在内存中的;
- 我们将 8 个比特(Bit)称为一个字节(Byte),并将字节作为最小的可操作单元。
我们不妨先从最简单的整数说起,看看它是如何放到内存中去的。
变量(Variable)
现实生活中我们会找一个小箱子来存放物品,一来显得不那么凌乱,二来方便以后找到。计算机也是这个道理,我们需要先在内存中找一块区域,规定用它来存放整数,并起一个好记的名字,方便以后查找。这块区域就是“小箱子”,我们可以把整数放进去了。C语言中这样在内存中找一块区域:
int a;
int
又是一个新单词,它是 Integer 的简写,意思是整数。a 是我们给这块区域起的名字;当然也可以叫其他名字,例如 abc、mn123、student_number 等。这个语句的意思是:在内存中找一块区域,命名为 a,用它来存放整数。
注意 int 和 a 之间是有空格的,它们是两个词。也注意最后的分号,int a
表达了完整的意思,是一个语句,要用分号来结束。
不过int a;
仅仅是在内存中找了一块可以保存整数的区域,那么如何将 99、1000、456 这样的数字放进去呢?C语言中这样向内存中放整数:
a=99;
=
是一个新符号,它在数学中叫“等于号”,例如 1+2=3,但在C语言中,这个过程叫做赋值(Assign)。赋值是指把数据放到内存的过程。把上面的两个语句连起来:
int a; a=99;就把 99 放到了一块叫做 a 的内存区域。你也可以写成一个语句:
int a=99;a 中的整数不是一成不变的,只要我们需要,随时可以更改。更改的方式就是再次赋值,例如:
int a=99; a=1000; a=456;第二次赋值,会把第一次的数据覆盖(擦除)掉,也就是说,a 中最后的值是 456,之前的 99、1000 已经不存在了,再也找不回来了。
因为 a 的值可以改变,所以我们给它起了一个形象的名字,叫做变量(Variable)。
int a;
创造了一个变量 a,我们把这个过程叫做变量定义。a=99;
把 99 交给了变量 a,我们把这个过程叫做给变量赋值;又因为是第一次赋值,也称变量的初始化,或者赋初值。你可以先定义变量,再初始化,例如:
int age; age=18;也可以在定义的同时进行初始化,例如:
int age=18;这两种方式是等价的。
数据类型(Data Type)
数据是放在内存中的,变量是给这块内存起的名字,有了变量就可以找到并使用这份数据。但问题是,该如何使用呢?我们知道,诸如数字、文字、符号、图形、音频、视频等数据都是以二进制形式存储在内存中的,它们并没有本质上的区别,那么,00010000 该理解为数字 16 呢,还是图像中某个像素的颜色呢,还是要发出某个声音呢?如果没有特别指明,我们并不知道。
也就是说,内存中的数据有多种解释方式,使用之前必须要确定;上面的
int a;
就表明,这份数据是整数,不能理解为像素、声音等。int 有一个专业的称呼,叫做数据类型(Data Type)。顾名思义,数据类型用来说明数据的类型,确定了数据的解释方式,让计算机和程序员不会产生歧义。在C语言中,有多种数据类型,例如:
数据类型 | 说明 | 数据类型 | 说明 |
---|---|---|---|
_Bool | 布尔型(C99) | long long | 超长整形(C99) |
char | 字符型 | float | 单精度浮点型 |
short | 短整型 | double | 双精度浮点型 |
int | 整型 | long double | 长双精度浮点型 |
long | 长整型 | void | 无类型 |
这些是最基本的数据类型,是C语言自带的,如果我们需要,还可以通过它们组成更加复杂的数据类型,后面我们会一一讲解。
连续定义多个变量
为了让程序的书写更加简洁,C语言支持多个变量的连续定义,例如:int a, b, c; float m = 0.27, n = 93.25; char p, q = '#';连续定义的多个变量以逗号
,
分隔,并且要拥有相同的数据类型;变量可以初始化,也可以不初始化。数据的长度(Length)
所谓数据长度(Length),是指数据占用多少个字节。占用的字节越多,能存储的数据就越多,对于数字来说,值就会更大,反之能存储的数据就有限。多个数据在内存中是连续存储的,彼此之间没有明显的界限,如果不明确指明数据的长度,计算机就不知道何时存取结束。例如我们保存了一个整数 520,它占用 4 个字节的内存,而读取时却认为它占用 3 个字节或 5 个字节,这显然是不正确的。
所以,在定义变量时还要指明数据的长度。而这恰恰是数据类型的另外一个作用。数据类型除了指明数据的解释方式,还指明了数据的长度。因为在C语言中,每一种数据类型所占用的字节数都是固定的,知道了数据类型,也就知道了数据的长度。
在 32 位环境中,各种数据类型的长度一般如下:
数据类型 | 说明 | 长度(字节) |
---|---|---|
_Bool | 布尔型(C99) | 1 |
char | 字符型 | 1 |
short | 短整型 | 2 |
int | 整型 | 4 |
long | 长整型 | 4 |
long long | 超长整形 | 8 |
float | 单精度浮点型 | 4 |
double | 双精度浮点型 | 8 |
long double | 长双精度浮点型 | 8 |
C语言有多少种数据类型,每种数据类型长度是多少、该如何使用,这是每一位C程序员都必须要掌握的,后续我们会一一讲解。
最后的总结
数据是放在内存中的,在内存中存取数据要明确三件事情:- 数据存储在哪里
- 数据的长度是多少
- 数据的处理方式
变量名不仅仅是为数据起了一个好记的名字,还告诉我们数据存储在哪里,使用数据时,只要提供变量名即可;而数据类型则指明了数据的长度和处理方式。所以诸如
int n;
、char c;
、float money;
这样的形式就确定了数据在内存中的所有要素。C语言提供的多种数据类型让程序更加灵活和高效,同时也增加了学习成本。而有些编程语言,例如 Python、JavaScript、PHP 等,在定义变量时不需要指明数据类型,编译器会根据赋值情况自动推演出数据类型,更加智能。
最后需要说明的是:数据类型只在定义变量时指明,而且必须指明;使用变量时无需再指明,因为此时的数据类型已经确定了。