1)用指针作为函数的参数,它的作用是将一个变量的地址传送到另一个函数中。
#include<stdioh>
void change(int a,int b) / 定义一个函数, 两个指针为函数的形参/
{
int temp;
temp=a; /函数的作用是 交换两个变量/
a=b;
b=temp
}
void main()
{
int c,d;
int e,f; /定义两个实参/
scanf("%d %d",&c,%d);
e=&c;
f=&d; /分别将c、d的地址赋给e、f/
if(c>d) change(e,f);
printf("%d %d\n",c,d);
}
2)指针也可以指向函数
有2种解决方法,第一种是把MyFun(int x) 定义为static (适用于MyFun不需要实例的情况)
#include <iostream>using namespace std;
class CStream
{
public:
static void MyFun(int x);
protected:
private:
};
void CStream::MyFun(int x)
{
cout << x << endl;
}
void(FunP)(int); //定义函数指针
int main(int argc, char argv[])
{
CStream m_st;
FunP = m_st->MyFun; //把函数名赋给函数指针变量
(FunP)(20);
(FunP)(30);
}
第二种方法是用pointer to member function (适用于MyFun() 需要实例的情况)
#include <iostream>using namespace std;
class CStream
{
public:
void MyFun(int x);
protected:
private:
};
void CStream::MyFun(int x)
{
cout << x << endl;
}
void (CStream::FunP) (int); //定义函数指针
int main(int argc, char argv[])
{
CStream m_st = NULL;
FunP = &CStream::MyFun; //把函数名赋给函数指针变量
(m_st->FunP)(20);
(m_st->FunP)(30);
}
ch;是不是你在别的地方复制的或者是你在抄这道题目时搞错了。我大概了解你这到题目的意思。这道题目应该是想通过函数指针调用函数fun。首先函数指针的定义就出错了。你题目里面的f1应该就是一个函数指针,但是它的定义应该这样char (f1)(char )=fun;
我首先来解释一下为什么这样定义吧。指针存放的是地址,那么函数指针也不例外了。而且你定义函数指针的时候要与你要调用的函数的形式一样,注意到没有上面我定义的时候返回值和形参的类型都相同。
定义好了函数指针那么现在就来帮它赋值,我们赋给函数指针的值要是地址,而函数名存放的就是函数在内存中的起始地址。所以我们只需要把函数名赋给函数指针就行了。
既然值都赋好了,我们下一步就应该调用它了。调用的时候应该这样f1(s);这里面的实参用s知道为什么吗?那是因为s也是一个字符型的指针变量和形参一样当然要这么调用了。
下面我就将程序写一遍吧
char fun(char c);
{
;(这是你要实现的fun函数的功能)
}
main()
{
char s="one";
int a[5]=;(上面的程序这里都没有将数组的类型申明出来,肯定是有问题的,这里如果是char类型即(char a[5]=),那么下面的答案还有另外一种)
char (f1)(char )=fun;
char ch;(这个变量应该是用来接收fun函数返回的值的)
ch=f1(s);(这就是调用fun函数了,如果上面的a数组时char类型那么还有之中情况ch=f1(a))
}
如果是考察函数指针的运用我想应该就是这样的,我不知道是不是你的题目抄错了还是我理解错了。函数指针调用如果是这样的话是绝对没错的。所以最后的答案最终只有两种结果
ch=f1(s)或ch=f1(a);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)