为什么要有指针

Yang 1433

为什么要有指针,主要有两点原因:一、指针的意义;二、指针的作用。指针是一种基本的数据类型,它存储了一个变量的地址。指针可以用于访问和修改存储在内存中的变量。在 C 和 C++ 中,指针是一种非常重要的数据类型,因为它们允许程序员直接访问内存中的数据。

一、指针的意义

在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。

在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。

一、指针的作用

1、指针的使用使得不同区域的代码可以轻易的共享内存数据

当然也可以通过数据的复制达到相同的效果,但是这样往往效率不太好。指针节省内存主要体现在参数传递上,比如传递一个结构体指针变量和传递一个结构体变量,结构体占用内存越大,传递指针变量越节省内存的,也就是可以减少不必要的数据复制。

2、有些操作必须使用指针完成

如:操作申请的堆内存。

又如:C语言中的一切函数调用中,值传递都是“按值传递”的。如果要在函数中修改被传递过来的对象,就必须通过这个对象的指针来完成。(如对一个函数传入一个x一个y,交换两者的值,如果只是按值传递,那在函数内交换并不影响函数外的x和y,而指针则可以做到)

3、动态分配内存

大多数情况下,可以看到程序使用的内存是通过显式声明分配给变量的内存(也就是静态内存分配)。这一点对于节省计算机内存是有帮助的,因为计算机可以提前为需要的变量分配内存。但是在很多应用场合中,可能程序运行时不清楚到底需要多少内存,这时候可以使用指针,让程序在运行时获得新的内存空间(实际上应该就是动态内存分配),并让指针指向这一内存更为方便。

延伸阅读

指向函数的指针

程序编译后,每个函数都有执行名列前茅条指令的地址即首地址,称为函数指针。函数指针即指向函数的指针变量,要间接调用函数可以使用指针变量来实现。

int(*pf)(int, int);

通过将pf与括号中的“ * ”强制组合组合在一起,表示定义的pf是一个指针,然后与下面的“ ( ) ”再次组合,表示的是该指针指向一个函数,括号里表示为int类型的参数,最后与前面的int组合,此处int表示该函数的返回值。因此,pf是指向函数的指针,该函数的返回值为int。函数指针与返回指针的函数的含义大不相同。函数指针本身是一个指向函数的指针。指针函数本身是一个返回值为指针的函数。

float(*p)(float x,float y);定义了一个指向函数的指针变量。首先c=(*p)(a,b);语句:因为指针p储存的是max函数的首地址,(*p)(a,b) 就相当于 max(a,b),函数返回较大值。其次c=(*p)(a,b);语句:因为指针p储存的是 min函数的首地址,(*p)(a,b) 也就相当于min(a,b),函数返回较小值

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部