(1)指针是什么?
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。 在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。
(2)指针的第一个小应用
如何从形式上理解指针
(*p)操作是一种运算,返回p值作为地址那个空间的取值
(&p)操作也是一种运算,返回声明p时p的地址
来理解一下第一种的应用(*p)
假设p分配空间时被分配给了3001H和3002H两个位置
int *p;
p=2003H;
*p=3000H;
第一问**p的值为多少
这个问题可以这么看,字母最近原则,先算(*p)也就是*(2003H),然后再算*(*(2003H))然后就得出一个结论*(*(2003H))=*(3000H)等于同一个值
我是这么理解的,本来有这么一个p然后将一个地址值赋给它,*p去到这个地址中找,又找到了一个地址3000H,**p就是到这个地址中再去找值,恩就这样
第二问&&p为多少?
同样的就近法可以得到这么一个等式&(3001H)此时应该报错3001H这个地址怎么会有地址呢?
第三问*(&p)为多少?
*(3001H)=2003H
第四问&(*p)为多少?
&(3000H)=2003H &(3000H)是求3000H这个变量的内存地址,依然是p的值