你真的理解程序中的变量吗
关于变量,很多人肯定觉得这有啥可说的,不就是int a=10这类的吗,这样的太简单了,
学习编程语言入门的时候就已经知道了,能没啥可讲的。
可是,你真的理解变量吗,你知道变量的本质是什么吗?
变量的概念 既能读又能写的内存对象,称为变量;若一旦初始化后不能修改的对象则称为常量。
上述概念中说到了内存对象,要想真正理解变量就需要从内存的角度来理解。
我们来看下面这张图:
int a;定义了一个变量a,在我们定义了变量a之后,在内存中相应的操作是什么呢?
从上面的图我们可以看到定义了一个a变量,在内存中,为a分配了4个字节的内存用于存储a这个变量的值,同理,double b定义了一个double类型的b变量,这时,在内种为b变量分配的内存空间则是8个字节。
那我们接下来该谈谈变量的本质是什么了。
其实变量只是内存空间的一个标号,相当于一个门牌号。
我们来看下面这个一段测试程序。
#include<stdio.h>
int main()
{
//
//2种方法,通过变量直接操作内存
// 通过内存编号操作内存
int i = 0;
printf("&i:%d\n", &i);
//-5315172为i变量的首地址,通过打印变量i的首地址之后,通过地址来为变量重新赋值
*((int *)(-5315172)) = 10;
printf("i:%d\n", i);
;
return 0;
}
我们有以下总结:
1. 程序通过变量来申请和命名内存空间 int i = 0
2. 通过变量名访问内存空间
(一段连续)内存空间的别名(是一个门牌号)
1. 改变量有几种方法?
直接;间接。内存有地址编号,拿到地址编号也可以修改内存(典型如c中的指针)
变量只是内存中的一个标号,通过变量操作内存。
我们要明白,为变量赋值,是向变量所代表的内存空间中写数据,而不是向变量读写数据。
那么接下来你不禁会问变量i存放在哪呢?
这个问题我们首先来看这张图:
看到这张图,是不是很熟悉,开始学编程语言的时候都会讲这样堆内存,栈内存的概念,其实变量i这样的存放在代码区,而变量i所代表的这部分内存空间在栈内存区域,程序局部变量一般存放在这个区域。