你真的理解程序中的变量吗

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/H_Gao/article/details/53730168

关于变量,很多人肯定觉得这有啥可说的,不就是int a=10这类的吗,这样的太简单了,
学习编程语言入门的时候就已经知道了,能没啥可讲的。
可是,你真的理解变量吗,你知道变量的本质是什么吗?

变量的概念 既能读又能写的内存对象,称为变量;若一旦初始化后不能修改的对象则称为常量。

上述概念中说到了内存对象,要想真正理解变量就需要从内存的角度来理解。

我们来看下面这张图:
image

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. 通过变量名访问内存空间
    (一段连续)内存空间的别名(是一个门牌号)
  3. 改变量有几种方法?
    直接;间接。内存有地址编号,拿到地址编号也可以修改内存(典型如c中的指针)

变量只是内存中的一个标号,通过变量操作内存。
我们要明白,为变量赋值,是向变量所代表的内存空间中写数据,而不是向变量读写数据。

那么接下来你不禁会问变量i存放在哪呢?

这个问题我们首先来看这张图:
image

看到这张图,是不是很熟悉,开始学编程语言的时候都会讲这样堆内存,栈内存的概念,其实变量i这样的存放在代码区,而变量i所代表的这部分内存空间在栈内存区域,程序局部变量一般存放在这个区域。

欢迎关注我的公众号 ,不定期会有优质技术文章推送 。

微信扫一扫下方二维码即可关注
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/H_Gao/article/details/53730168