C/C++高阶语法:函数指针引用,引用与指针

1、函数指针引用的定义如下:

     type  (*  &pFunc)(type,type) ( func);

2、看一段实例

int (*add)(int ,int);
int (*&pFunc)(int ,int)(add);
      这个实例将pFunc引用指向add函数,我们知道引用一经绑定,便不能将其绑定到其他的对象,但是我们可以通过引用来修改其所绑定的对象。


3、分析下面这个简单的程序之后,应该都能明白个大概了吧

 <pre name="code" class="cpp">#include <iostream>
using namespace std;

int Add(const int& a ,const int& b)
{
   return a+b;
}

int Redu(const int &a,const int& b)
{
   return a-b;
}

void Change(int (* &refFunc)(const int& ,const int & ))
{
     refFunc = Redu;
}

int main()
{
   int (*p)(const int& ,const int& )(Add);//括号用于初始化函数指针
   cout<<p(2,3)<<endl;  //结果会输出5;

   Change(p);

   cout<<p(2,3)<<endl;//最终会输出-1

   return 0;
}
 

          程序运行的结果如图所示:

        

         程序中首先将函数指针p初始化为Add函数,然后通过change()函数,函数的形参为引用,然后在函数内部将修改引用的值,此时也就是修改了P的值,使得p指向了

   Redu函数。

          这个程序并不难,主要是理解函数指针和引用。


4、引用和指针的联系和区别。

      通过前面的学习,我们知道我们可以通过指针或是引用间接的来访问或是操作其他的对象。指针(Pointers)是通过" * "和“ -> ”操作符,而reference 则是通过.操作符。

      引用的也是通过指针来实现的,其具体的原理这里不再深究。我们所要做的就是了解何时使用引用,何时使用指针。

      1)、我们知道没有所谓的空引用,即null reference,但是 指针可以为NULL。所以如果我们需要一个变量来指向某个对象,但是这个对象也有可能为空,此时我们应该使 用的是指针。换句话说,如果某个变量总是代表某个对象,同时这个对象一定不会为NULL,那么我们所使用的一定是引用。

       2)、pointers可以被重新赋值,指向另外一个对象,但是reference却总是指向它最初获得的那个对象。

            

string s1("today");
string s2("beautiful");

string &rs = s1;   //rs代表s1
string *ps = &s1;  //ps代表s1

rs = s2;           //rs代表s1,此时s1 = "beautiful"
ps = &s2;          //ps代表s2

        所以我们可以这样概括一下:当你知道你需要将某个变量指向某个对象时,而且绝不会将其指向其他东西,或是当你实现一个操作符而其语法需求无法由pointers完成,那么我们就应该选用referencs.。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值