C语言 内存编址
计算机中的内存是由一个个的存储单元构成的,为了管理这些存储单元,对每个存储单元进行编号,这就是内存的编址。内存编址是按字节进行的,每个字节对应一个地址编号。当程序运行时,系统中会有一个内存分配表,每遇到一次变量声明语句(int、double……)或函数调用语句(函数中的形参),系统会根据变量的大小在内存中寻找合适的空间分配,并且在内存分配表中增加一行记录,记载变量与内存地址的对应关系。例如,有如下程序:
main()
{
int a;
char ch;
double x;
…
}
则该程序在内存中的内存分配表的近似形式如表所示。
ID | Name | Address | Length |
1 | a | 2000 | 4B |
2 | ch | 2800 | 1B |
3 | 乂 | 2300 | 8B |
例如,某宾馆有30个房间,每个房间都有自己的编号101、102、103……当有旅客需要住宿,服务台工作人员会查询宾馆的客房情况,并将合适的空房分配给旅客住宿。同时也将旅客住宿信息(身份证号、姓名、房间号等)登记下来。
一个变量根据其类型不同在内存中所占的字节数也不同,例如char占1个字节、short占2个字节……变量在内存中的首字
节单元的地址称为该变置的地址。例如表11-1中,变量a在内存中的地址为2000,它在内存中占据2000~2003地址段,如图所示。若要访问变量a,只需到内存空间2000开始的位置去访问就可以了。
可以看出i内存地址就是要访问变置的标识,所以将地址称为指针,也就是说,指针就是地址。
变量的地址和变置的值是两个不同的概念。例如,张三去某宾馆住宿,他住在了301房间。那么可以认为301是变置的地址,而张三住在此房间中,张三就是此刻变量的值。变置的地址一旦被分配,在它作用域内其地址是不会改变的,而变量中的值是可以改变的。如301房间今天住的是张三这个人,而明天可能住的是李四。
点击加载更多评论>>