C++038(指针)
1.指针
1.1变量 地址与指针
要想弄明白什么是指针,就必须弄清楚数据在内存中是如何被存储的,又是如何被读取的。
通常来说,系统会按字节对每个内存单元进行编号,这些内存单元就好比是许多带有编号的小房间,要想使用内存,就需要知道房间编号。
假设我们定义了一个整型变量i,编译器会为其分配4个字节——编号为4001~4004的存储单元,
接下来我们又定义了一个整型变量j,则j在内存中的起始地址是4005,同样占4个字节,即编号4005~4008的内存单元中保存的是j。
- 可见,编译系统会为每个变量都分配了一个能满足其类型大小的内存单元地址,访问该地址就能找到对应变量。
- 汇编语言中直接通过地址访问内存单元,C、C++、Java等高级语言中通过变量名访问对应内存单元,得到其中保存的变量值。
- 这是因为代码经过编译后,会将变量名转换为该变量在内存中的存放地址。
- 例如,语句“i+j;”的计算过程如下:
- 根据变量名与地址的对应关系,找到变量i的地址4001,从4001开始读取4个字节数据放到CPU寄存器中,再找到变量j的地址4005,从4005开始读取4个字节的数据放到CPU另一个寄存器中,
- 最后通过CPU的加法中断计算得出结果。
- 既然通过地址可以访问指定的内存单元,因此可以说该地址“指向”该内存单元。为了好记忆,我们将变量的地址形象化地称为该变量的“指针”,意思是通过它能找到对应的内存单元。
1.2 指针变量
- 一个变量的地址称为该变量的指针<