前边对于指针的解说和一些不怎么恰当的例子,或许使有些同学们已经了解了指针的本质问题,当然如果是没有实践基础的话,也可能因此更糊涂了。
那么让我们今次再具体和肯定的说一下指针的问题好了。第一点,就是c当中为什么引用指针的概念(这只是自己使用汇编及c语言后的体会,并不一定准确,大家谨慎阅读了),如果是有些汇编基础的同学们,一定对此问题没有什么疑问了,我想本质的原因就寻址的问题,首先是程序的数据存储在内存的某个地方,取得数据需要寻址,其次程序代码本身存储在内存的某个区域,程序的跳转需要寻址,还有过程的调用需要寻址,栈的操作直接操作地址。总之一个程序从运行到到结束都离不开地址的操作,而且在程序运行的过程中,默认的就有一个程序运行到何处的寄存器一直跟踪程序的运行。可见这些都是频繁的操作地址,因此地址在不断的变化,我们的程序如果对某些数据或程序段感兴趣的话,就要在程序的数据区域中记住这些可能被引用的地址,因此c中发明这种指针变量也就自然而然了。而那些指针常量,就是已经存在的各类地址,指针变量就是暂时存储我们认为有用的地址信息的某个内存处,因为32位机器的地址有效范围是0 —— 4G-1,所以用四个字节就完全可以寻址所有内存,也正是因为如此,不论你求任何指针变量的长度,都是4字节。
第二点,要说指针跟地址有什么区别的话,最重要的要理解,指针的运算和地址的运算是不同的,地址运算时,每次仅仅是增加(当然也可能是减少)了1个字节倍数地址,而指针就不是简单的加1字节的倍数,而是加上一个数据结构的长度的倍数。这样才能得到正确的地址,也才能操作到我们想要的数据。
第三点,这样看来反而是越是形象的问题越是显得抽象了,而那些抽象东西反而越形象了。就比如果这里指针本来很形象,看似很好理解,可是到了这里,反而是汇编语言中对寻址方式入了门道的同学们,理解起指针来更有些独到的见解,也更深刻了。
【c|关于指针,我对初学C语言的同窗们真的有话要说!4】
推荐阅读
- c|《C陷阱与缺陷》第二章阅读笔记
- C语言(蓝桥杯--等差素数列)
- C/C++|C++中简单的string类的实现
- RBE104TC 开发
- C|c语言面试题每日一练
- c/c++|c++泛型编程——模板
- c/c++|函数栈帧的创建和销毁(程序员必了解内容)
- c语言|c语言 指针 pdf,深入理解C语言指针.PDF
- C|C语言(2048游戏演示和说明)