变量的内存地址
终极管理员 知识笔记 117阅读
内存地址是什么意思?
答:也就是说一个内存地址代表一个字节(8bit)的存储空间。 例如经常说32位的操作系统最多支持4GB的内存空间,也就是说CPU只能寻址2的32次方(4GB),注意这里的4GB是以Byte为单位的,不是bit。 也就是说有4G=4 1024M(Byte)=4 1024 1024Kb (Byte)=4 1024 1024 1024Byte (8bit),即2的32次方个8bit单位。 至于说为什么会出现一种是用4位十六进制表示内存地址,另一种用8位十六进制表示内存地址,那是根据不同的硬件环境来的。 个人理解:有些CPU只能寻址16位(16根地址线),所以用4位十六进制表示地址就够用了。 有些CPU只能寻址32位(32根地址线),所以用8位十六进制。 2.理解内存。
计算机中内存地址是怎么编址的?
答:计算机中内存是按照字节编址的,也就是每个字节都有唯一的地址,例如32位计算机,内存地址空间是2的32次方,也就是4G字节空间,地址编号从0开始,范围是0到2^32-1。 C语言是接近硬件的高级语言,提供运算符 (&和*)以及指针直接操作内存地址。
除了变量名不是内存地址,其他都是名都是地址吗?
答:除了变量名不是内存地址,其他都是名都是地址吗? 所谓的其他名无非是函数名、标识符常量名、指针名、数组名、结构名、类名等等。 比如指针名、数组名、函数名就是地址,它们分别表示指针所指向元素的地址、数组的首地址和函数的入口地址。 变量名虽然不直接表示地址,但可用取地址符号&来获得它所代表的变量的存放地址。 因为在定义变量的同时会分配给它相应的空间 变量名是给编译器看的,编译器根据变量是局部还是全局分配内存地址或栈空间,所谓的变量名在内存中不存在,操作时转换成地址数存放在寄存器中了。 编译器会将合法的变量名放到一个叫“符号表”的一个表中。 每个符号对应一个地址。 当你调用此变量时,就会根据此符号表找到对应的地址,然后进行操作。
内存和地址是密不可分的吗?
答:所以内存和地址是一一对应密不可分的。 接着看,什么是普通变量? 如 char a; 就是一个普通变量。 普通变量a其实是语言本身创造了,是为了更方便的表示内存。 我们对a进行访问其实就是直接对内存进行访问。 至于a表示的内存的地址是多少,程序员一般不用关心。 编译器会自动分配地址,也就是常说的为a分配一个地址。