变量名与变量地址的一些理解
来源:互联网 发布:程序员的技术栈 编辑:程序博客网 时间:2024/06/14 09:03
今天看了各位大咖写的博文,受益良多,我对变量名与变量地址的区别又有了进一步的了解。要想彻底理解变量名与变量地址,能有一些《计算机组成原理》里与存储器相关的知识储备,和《数据结构》里有关堆栈的内容。
不想点这个链接可以看此链接下面的截图
http://blog.csdn.net/u012503217/article/details/46564451
下面这篇博文详细论述了C语言内存分布的方式,仅作了解。
http://blog.csdn.net/youoran/article/details/10990815
这篇博文对于初学者来说不是很容易看懂,你可以先作为存货,日后再看,绝对有收获。其实目前不懂这些也没有什么太大的关系,接着往下看。你也可以像我这样,自己写个小程序去运行一下。
下面是我自己的一些理解,不权威,但至少也是我看了很多的相关内容所做的一些理解,应该还不太成熟,但至少对于第一次学C语言的人来说,作为初步理解是完全没有问题的。
变量名是对某块地址的统称,这块地址占多少个空间,占多少个二进制代码,是取决于此变量名的类型。比如 int 整型,占的位置是四个空间(这4个空间是固定的,是取决与你的编译器的)。在内存中有一个专门的地方来存用户定义的变量。计算机通过变量名去找到变量地址,从而找到变量的地址里放的数据。举个例子: #include<stdio.h> int main() { int a; printf("%d\n",a); printf("%p\n",&a); return 0; }
这段代码的意思很明确:
int main()
{
定义一个整型变量a,但并不对其初始化;
输出a的值;
输出a的地址的值;
程序正常退出。
}
然后我们运行一下这个代码,得到的结果是:
在编译器没有warring 没有error 的前提下,这里我们看到这里并没有输出a的值,输出的只是a在内存中的地址,这个地址是十六进制输出,是一种 对应硬件存储单元的编号。我们不妨这样理解,C语言是面向程序设计的语言,为了方便程序员的记忆和理解,把长长的变量地址简记为a 。有兴趣你可以试一下,你的编译器,不管你定义一个变量的名字叫什么,叫a,b或者是c,对于 int 来说,第一个被定义的变量 的变量地址总是相同的。并且第一个变量的变量地址与第二个变量的变量地址 的差值,就是你第一个变量所占的存储内存空间个数。也就是说,你的变量地址的大小,是根据你定义变量的顺序和你所定义的变量的类型来决定的。(int 只是这里举的例子,对于char 、double等,只要是同一类型的,都是一样的道理。)
比如,你可以写一段这样的代码在你的编译器上试试:
#include<stdio.h> int main() { int a; int b; int c; int d; printf("%d\n",a); printf("%p\n",&a); printf("%d\n",b); printf("%p\n",&b); printf("%d\n",c); printf("%p\n",&c); printf("%d\n",d); printf("%p\n",&d); return 0; }
运行 ,得到的结果是这样的:
在上面的那个运行结果,并没有输出变量的值(为什么?可以先作为一个问题保留一下,下次再讲),本次运行对于这些没有初始化的变量,有了输出的值,这些值是随机的(在这里看起来是在0、1之中随机噢,下次再做深入探讨)。然后我们仔细看一下这个变量地址的规律,第一个被定义的变量值最大,第二个被定义的次之,第三第四依次减小(这其实是类似于“栈”的存入方式:先定义的 先进去,存在栈底,数值最大;后定义的 后进去,存在栈顶,数值最小)。
我们可以清楚的看到,第一个和第二的变量地址差值为4 。正好与前面所说的一致。
为了证明我所说的地址的分配是按照我们定义变量的顺序来的,我们可以把第二段程序中的a、b的定义顺序换一下,不改变其输出顺序。
很明显,地址最大的那个,是在改动后的程序中最先定义的b 。
我是一个有这谦卑姿态的学生,对所学的知识坚持弄清每一点的学生。如果上面写的有任何问题,欢迎批评与讨论。 这篇文章大概也没有人会看吧。这只是我的学习笔记,最后对我自己说一句:书山有路勤为径。 @青山遮不住 You bless me.
- 变量名与变量地址的一些理解
- 变量名与变量地址
- 变量名的一些规则
- 变量名和变量地址
- 变量名和地址的关系探讨
- 变量名和地址的关系探讨
- 变量名和地址之间的关系
- 指针变量与变量地址
- 变量名与关键字
- 数组名与指针变量的区别
- 指针变量与数组名的区别
- 【C++】变量(五) 变量名的作用域以及变量定义的一些习惯
- PHP变量存储的一些个人理解
- C++关于局部变量的一些理解
- C 里面 ---变量名-- 和 --地址-- 的关系探讨
- C语言变量名和地址的关系探讨
- C语言变量名和地址的关系探讨
- C 里面 ---变量名-- 和 --地址-- 的关系探讨
- HTML 5概述
- SCRAPY_part4_Items
- 长期失眠如何调理?经常熬夜的朋友的福音来了。
- AMH面板彻底删除网站的方法
- shell版俄罗斯方块
- 变量名与变量地址的一些理解
- Spring框架 WEB-INF下访问login.jsp
- div中嵌套input 以及input默认样式的清除
- android api 26 ActivityManagerNative类被弃用。代理类ActivityManagerProxy已经被删除。改用AIDL方式。
- 3.1.1 Agri-Net 最短网络
- Python Pandas实现数据分组求平均值并填充nan
- 邬贺铨:工业物联网靠花钱是买不到的!
- VirtualBox NAT+host-only高级网络配置 ,实现互通
- 趣图:程序员调 Bug 的 5 个阶段