luckstudent 发表于 2016-10-14 12:35:34

关于函数指针的疑问

本帖最后由 luckstudent 于 2016-10-14 12:40 编辑

#include<iostream>
#include<string>

using namespace std;

int fun1(const string& s)//返回字符串的长度
{
    return s.size();
}

int fun2(const string& s)//返回字符串每个字符对应int值的和
{
    int length = 0;
    for(unsigned int i = 0; i != s.size(); ++i)
      length +=s;
    return length;
}

auto getFun(int i) -> int (*)(const string&)//根据i的值来选择返回指向上述哪个函数的函数指针。
{
    if(i == 0)
      return fun1;
    else
      return fun2;
}

int *getPoint(int i)//返回一个int型指针
{
    int *p = new int;
    *p = i;
    return p;
}
int main()
{
    string s = "abc";
    cout<<(getFun(1))(s)<<endl;//可以正常工作
    cout<<getFun(0)(s)<<endl;
    cout<<getFun(0)<<endl; //为什么这里函数指针返回1,而不是一个地址值。
    cout<<getPoint(10)<<endl;//返回地址值
    return 0;
}

花开自有丶花落 发表于 2016-10-16 08:01:32

length +=s;   这里字符串和unsigned int 怎么加

花开自有丶花落 发表于 2016-10-16 08:02:45

int *p = new int; new了int却没有释放

花开自有丶花落 发表于 2016-10-16 08:11:36

也没有声明函数指针,假设有如下一个函数
double pam(int);函数名等价于函数地址,pam就为整个函数的地址
则函数指针应为 double (*typename)(int);这个函数指针可以接受任何返回值为double,参数列表为1个int的函数。
然后将函数赋给函数指针
typename = pam;
然后想使用函数那样使用函数指针
double a = pam(4);
double b = (*typename)(4);这里的函数指针要加括号

花开自有丶花落 发表于 2016-10-16 08:14:14

而auto getFun(int i) -> int (*)(const string&)这个函数只是返回一个指针,并不是函数指针,而且这个函数的里调用的fun1和fun2,都是返回int,可能会报错,可能会被转换为int*,具体也记不清了
页: [1]
查看完整版本: 关于函数指针的疑问