关于函数指针的疑问
本帖最后由 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;
} length +=s; 这里字符串和unsigned int 怎么加 int *p = new int; new了int却没有释放 也没有声明函数指针,假设有如下一个函数
double pam(int);函数名等价于函数地址,pam就为整个函数的地址
则函数指针应为 double (*typename)(int);这个函数指针可以接受任何返回值为double,参数列表为1个int的函数。
然后将函数赋给函数指针
typename = pam;
然后想使用函数那样使用函数指针
double a = pam(4);
double b = (*typename)(4);这里的函数指针要加括号 而auto getFun(int i) -> int (*)(const string&)这个函数只是返回一个指针,并不是函数指针,而且这个函数的里调用的fun1和fun2,都是返回int,可能会报错,可能会被转换为int*,具体也记不清了
页:
[1]