函数指针和函数引用(转载)

来源:互联网 发布:简书独立域名 编辑:程序博客网 时间:2024/06/04 18:06
① 函数指针的例子
#include <iostream>
void print(int i)
{
    std::cout<< i <<std::endl;
}
 
void multiply(int& nDest, int nBy)
{
    nDest *=nBy;
}
 
void print_something()
{
    std::cout<< "something"<< std::endl;
}
 
int sayHello()
{
    std::cout<< "Hello, World!"<< std::endl;
    return10;
}
 
int main()

    void(*pFunction_1)(int);
    pFunction_1= &print;
   pFunction_1(1);
    //输出结果为1
 
    void(*pFunction_2)(int&, int) =&multiply;
    int i =1;
   pFunction_2(i, 10);
    std::cout<< "i = "<< i <<std::endl;
    //输出结果为10
   
    void(*pFunction_3)();
    pFunction_3= &print_something;
   pFunction_3();
    //输出结果为something
 
    int(*pFunction_4)();
    pFunction_4= &sayHello;
    int a =pFunction_4();
    //输出结果为Hello, World!
    std::cout<< a <<std::endl;
    //输出结果为10
   
    return0;
}
 
② 函数引用的例子
#include <iostream>
void print(int i)
{
    std::cout<< i <<std::endl;
}
 
void print2(int i)
{
    std::cout<< i <<std::endl;
}
 
void multiply(int& nDest, int nBy)
{
    nDest *=nBy;
}
 
void print_something()
{
    std::cout<< "something"<< std::endl;
}
 
int sayHello()
{
    std::cout<< "Hello, World!"<< std::endl;
    return10;
}
 
 
int main()
 
    // void(&rFunction_1)(int);
    //错误:未初始化引用!引用必须初始化
 
    void(&rFunction_2)(int) = print;
   rFunction_2(1);
    //输出1
 
    rFunction_2= print2;
   rFunction_2(2);
    //输出2
 
    void(&rFunction_3)(int&, int) =multiply;
    int i =1;
   rFunction_3(i, 10); 
    std::cout<< i <<std::endl;
    //输出10
 
    void(&rFunction_4)() = print_something;
   rFunction_4();
    //输出something
 
    int(&rFunction_5)();
    rFunction_5= sayHello;
    int a =rFunction_5();   // 输出Hello,World!
    std::cout<< a <<std::endl;
    //输出10
 
    return0;
}

总结:
函数指针的声明使用方式:
<想要指向的函数之返回类型>(*函数指针的名称)<想要指向的函数之参数类型…>
如要想声明一个函数指针指向以下函数:
void print(int i)
{
    std::cout<< i <<std::endl;
}
那么就可以如下操作:
void (*pFunction)(int);
然后如下用函数的地址给pFunction赋值:
pFunction = &print;
在然后,pFunction就可以和函数print一样使用了,比如,
pFunction(1);
等等。