C语言中,指针可以理解为:值为其所指变量的地址的变量,或简称存储地址的变量。
指针存储的内容不是具体的值,而是系统分配给对应变量的地址,这样,通过对指针(变量地址)的操作就可以实现对变量的操作,如赋值,查询,删除,甚至释放变量内存。
在汇编或者说处理器中,在实现运算,访问等操作时,有多种寻址方式,如
一,.立即寻址方式(immediate addressing)
MOV AX, 3064H ;操作数3064H直接就在语句中给出
二,直接寻址方式(direct addressing)
MOV AL, [78H] ;给出操作数的地址,通过访问此地址取得操作数
三,寄存器寻址方式(register addressing)
MOV BX, AX ; 将其他的寄存器的值直接赋值给当前寄存器
其中有一种寻址方式为寄存器间接寻址方式(register indirect addressing),如
MOV AL, [BX]
其中,寄存器BX存储的并不是要访问的操作数(假定为3064H),而是此操作数(3064H)所在的地址,通过访问BX中的地址达到访问(取得)操作数的目的。
此处,寄存器BX的效果和C语言的指针有异曲同工之妙。
问题:
“C语言中的指针本身的地址由系统自动分配,同样由其回收”(天勤书上),此处的“系统”应该是指编译器,从CPU层次上看,寄存器级别的访问应该是最快的,那么C的编译器能否将C代码中指针由寄存器实现呢(数量上肯定不可能为每一个指针分配一个寄存器,但是个别呢),(①C的编译器有此权限吗(直接访问寄存器),还是说只有操作系统才有权限 ②就算有,可以这样做吗)
参考资料:
汇编语言之寻址方式 http://blog.csdn.net/qq_35668537/article/details/74279554
声明:除已注明的引用外,文章系作者原创,引用转载请注明出处,如有必要请联系作者。