编程语言为什么有变量类型这个概念
编程语言为什么有变量类型这个概念,我们要先了解以下几点:一、什么是类型;二、什么是变量;三、类型规定了什么。在编程中,数据可以是数字、字符串、布尔值等。变量类型告诉编译器如何处理这些数据,以及如何在内存中分配空间来存储这些数据。

一、 什么是类型
编程语言为什么有变量类型这个概念,首先我们应该先了解什么是类型?
我们都知道,不管是中文、英文还是编程语言,都具有语法,语法规定了词怎么组成句子是符合规范的。
int a = 10;是可以的,但是a int = 10; 却不符合 C 语法规范。
10 + 10 是正确的,但是10 + “hello” 却是一个无效的表达式,但是该怎么判定呢?
答案就是「类型系统」,类型系统可以构建起一套判断表达式是否合法的规则。
对于每个变量都赋予一个类型,对于每种类型都定义了一组操作集合,而变量作为类型的实例,自然的继承了这些操作。
比如我们可以规定int + int、string + string 是合法的操作,直接禁止int + string等操作。
通过显示的将变量赋予类型,我们便可以在编译时去检查是否合法。
二、 什么是变量
变量名是变量地址的符号化,变量名是为了让我们编程时更加方便,对人友好,可计算机可不认识什么变量 a,它只知道地址和指令。
所以当你去查看 C 语言编译后的汇编代码,就会发现变量名消失了,取而代之的是一串串抽象的地址。
可以认为,编译器会自动维护一个映射,将我们程序中的变量名转换为变量所对应的地址,然后再对这个地址去进行读写操作。
三、类型规定了什么
类型首先是定义了一组操作,这是语法层面。
那所有的高级语言最后都会变成机器语言执行(解释型除外),再高级一点,那就是汇编,我们知道汇编语言是由一条条指令构成的。
而对于任何一条指令,最重要的有两点:数据的长度、数据在哪。
比如mov dest,src将一个字节从源地址 src 传送到目的地址 dest。实际上,数据在哪就是地址,数据长度其实某方面就是取决于类型。也正是这样,我之前在指针那篇文章中提到:指针的本质就是存储别的变量的地址,那么指针的类型是干什么用的呢?
是的,就是去访问指针所指向的地址的时候,指针的类型和指针的值(变量地址),提供了一条汇编指令最关键的两点:数据的长度和数据地址。
所以,类型除了提供语法检查以外,还能够明确变量所占据的内存空间。
同样也是规定了对字节的解释方式,同样 4 个byte,按照 int 和 float 类型解释得到的值完全不同。
更为本质的是,最终执行指令的 CPU 是区分了数据的类型的,不同的类型用不同的运算器,比如有 CPU 整形运算和 CPU 浮点型运算,不过浮点运算最为擅长的应该是 GPU。也正是因为 CPU 区分了类型,上层的汇编、高级语言才需要区分变量的类型,CPU 基础决定了上层建筑。
