内存四区,一个非常重要的知识点,搞懂了内存四区,才能更快的去搞懂指针。我们写的C语言代码,不夸张的说,都是直接或者间接的在操作内存。C语言之所以能够开发操作系统,就是指针的存在,而指针说白了就是地址,内存地址,指针变量说白了就是存储地址的变量。所以所以所以,指针和内存模糊搞不懂,就先暂停,别学指针,先去深入了解一下变量,对,就是那个在程序运行中可变的量,C语言最基础的变量。
你真的知道变量吗,难道别人在问你什么是变量的时候,只有一句“在程序运行中可变的量”?再问你什么是常量的时候,再加个不,“在程序运行中不可变的量”?没有其他的概念?如果只有这一两句从入门到精通书本上的话,怕是离从入门到放弃不远了。
我们先不唠内存四区,就先来了解了解变量,从变量引入内存
我们知道定义一个变量,最基本的需要考虑两部分,数据类型和变量名,为什么要有数据类型?数据类型的存在是什么意义?难道就是单独为了刷存在感?绝对不是的,之所以是关键字,就是因为它们很关键。
先定义一个变量int i;我们sizeof一下这个变量名:sizeof(i);//4我们sizeof一下这个数据类型:sizeof(int);//4-----------------------------------我们再定义一个变量char c;我们再sizeof一下这个变量名:sizeof(c);//1我们再sizoof一下这个数据类型:sizeof(char);//1-----------------------------------我们再再定义一个变量:double d;我们再再sizeof一下这变量:sizeof(d);//8我们再再sizeof一下这个数据类型:sizeof(double);//8-----------------------------------我们再再再定义一个变量:double dd;我们再再再sizeof一下这变量:sizeof(dd);//8我们再再再sizeof一下这个数据类型:sizeof(double);//8
OK,以上是在同一台设备上的结果。
1、发现我们不管sizeof数据类型还是变量名,返回的字节大小都是该变量占用的内存大小。那么我们是否可以把这个变量的数据类型和变量名都来表示这块内存呢,同一块内存。
2、同一个数据类型,变量名随意改变,sizeof的结果还是相同的。
3、那么我们再深入一下,这个变量的内存大小,和变量名没有关系,和数据类型有关系,有木有get到???
4、那么我们可以把这个变量表示为一块内存,定义一个变量就是开辟一块内存。
5、我们要一块内存拿来玩,就需要定义一个变量,那么我们要多大的内存,这就需要告诉编译器。拿数据类型出来,就是告诉编译器我们要多大的内存。那么我们可不可以试着把数据类型定义为表示内存的大小呢,int类型表示4个字节内存大小,char字符类型表示1个字节内存大小,double类型表示8个字节内存大小。而这些数据类型本身不占用内存空间,但是在定义变量的时候,就会有空间,编译器就会给该变量分配内存空间。我们使用这个变量名就可以找到这个内存,进行取值和赋值。
(好吧,这荔枝,确实有点生硬)
数据类型 变量名 = 值;
得出以下结论:
数据类型的本