鱼C论坛

 找回密码
 立即注册
查看: 2634|回复: 4

关于函数指针的疑问

[复制链接]
发表于 2016-10-14 12:35:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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[i];
    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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-16 08:01:32 | 显示全部楼层
length +=s;   这里字符串和unsigned int 怎么加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-16 08:02:45 | 显示全部楼层
int *p = new int; new了int却没有释放
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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);这里的函数指针要加括号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-16 08:14:14 | 显示全部楼层
而auto getFun(int i) -> int (*)(const string&)这个函数只是返回一个指针,并不是函数指针,而且这个函数的里调用的fun1和fun2,都是返回int,可能会报错,可能会被转换为int*,具体也记不清了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 15:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表