谈论指针(一)

来源:互联网 发布:c51单片机引脚图 编辑:程序博客网 时间:2024/05/17 03:51

(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的值




0 0