C++指针变量进行函数调用的问题

这是例题:是一个利用指针函数来比较并排序的程序#include<iostream>#include<string>usingnamespacestd;voidsort(i... 这是例题: 是一个利用指针函数来 比较并排序的程序
#include<iostream>
#include<string>
using namespace std;
void sort(int,int,int);
int main()
{
int a, b, c;
cout<<"输入三个数"<<endl;
cin>>a>>b>>c;
void(*pf)(int,int,int) \\这里我的理解是创建了一个名字为pf的指针函数,且指针函数里的值为整数类型?
pf=sort;
pf(a,b,c) \\把输入的值给函数,为a,b,c?
return 0;
}
viod sort (int x,int y,int z); \\因为 pf=sort, 所以对应函数值也一一对应为 a=x,b=y,c=z了?
{
int temp;
if(x<y)
{
temp=x;
x=y; \\这里我想问下,X Y的位置可以调换么? temp和X的呢?
y=temp;
}
if(x<z)
{
temp=x;
x=z
z=temp
}
fi(y<z)
{
temp=y;
y=z;
z=temp
}
cout<<x<< ">" <<y<< ">" <<z<<endl;
}
额 下半段这个式子我实在有点看不懂了...是将X Y Z中数字的地址调换 从而变换数字所在的位置来达到排序的目的么?
那不用指针对函数 调用, 直接将 函数sort 中的 x y z的值拿来做以上运算也可以达到目的么?
还有pf(a,b,c) 这个指针函数 包括赋值不是没用了么?
麻烦各位大大了 ,谢谢大家帮忙的我会给好心的你追加分的。。谢谢谢谢了。
展开
 我来答
kaixingui2012
2013-03-04 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6340万
展开全部
void(*pf)(int,int,int) \\这里定义了一个名字为pf的函数指针!注意是函数指针,请去查一下指针函数的意思吧

pf=sort ; //指针指向sort函数,可以通过pf指针来引用sort函数了(实际上这里是将sort函数的地址 值赋值给了pf,如果不理解这个,说明对指针的理解还不够清楚)

pf(a,b,c) ; //通过pf调用sort函数,这里等价于sort(a,b,c);

viod sort (int x,int y,int z) //这里多了个分号

{
int temp;
if(x<y) //如果x小于y , 则将x y的数值交换,打个比方,就是将两个篮子里的鸡蛋换一下
{
temp=x; //先将x的值存到temp中 , 将X中的蛋放到地上
x=y; //再将y的值存到x中 将Y中的蛋放到X里
y=temp; //将前边保存的x值存到y中 将地上的蛋放到Y中,实现了两个数的交换,后面的一样
}

}
追问
不好意思,楼上的老师  很仔细所以分给他了 我想知道怎么给你补些分,谢谢你的帮助。  各位百度知道里的人都是好人。  不能让你们白回答。  比一比下头那个灌水拿分的人 他真是不知道羞。
追答
不客气,解决问题就好,祝好运,学习进步
White_MouseYBZ
推荐于2016-03-24 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6525万
展开全部
你的理解太有问题了,所以看不懂以下的了。
1.这里我的理解是创建了一个名字为pf的指针函数,且指针函数里的值为整数类型——那是声明了一个叫pf的指针,这个pf指针是指向一个有3个int型形式参数的函数的,这个函数没有返回值。
2.因为 pf=sort, 所以对应函数值也一一对应为 a=x,b=y,c=z了——错了,这是函数定义。定义了一个叫sort的函数,这个sort有3个int型形式参数,这些形式参数不与谁对应,是自身需要的;该函数没有返回值。
3.把输入的值给函数,为a,b,c——这句理解得差不多。它使x=a、y=b、z=c。
4.这里我想问下,X Y的位置可以调换么? temp和X的呢——绝不能互换!你要搞情况谁给谁赋值:是把等号右边的值赋给左边的变量。
5.是将X Y Z中数字的地址调换——没有调换它们的地址,只是调换了它们的值。比如原来x=5,y=1,被调换成x=1,y=5了。
6. 还有pf(a,b,c) 这个指针函数 包括赋值不是没用了么——错。这不是赋值,是通过指针用实际参数a、b、c调用函数sort,就是使sort函数中的形式参数x=a、y=b、z=c并执行sort函数。
7. 函数sort 中的 x y z的值拿来做以上运算也可以达到目的么——排序啊。无论输入的a、b、c的值大小怎样混乱,最后都是从大到小输出。
追问
还有还有哦,师傅
viod sort (int x,int y,int z); \\因为 pf=sort, 所以对应函数值也一一对应为 a=x,b=y,c=z了
这是你唯一说我对一点的地方了, 这里对应是因为 pf=sort pf 被指向 函数 sort了 所以 a=x b=y c=z 这里 是因为 a和x 他们的所指向的地址相同了是吧?
真是麻烦你了。。
追答
没有明白你追问的一段代码想表达什么。因为pf=sort了,所以你调用时用pf(2,3,4)或直接用sort(2,3,4)效果是一样的。定义函数时()中的叫形参,调用时要用实参代替,就自动对应把实参的值赋给形参了。如前面的pf(2,3,4),就自动使x=2、y=3、z=4了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fb88b08
2013-03-04
知道答主
回答量:7
采纳率:0%
帮助的人:3.9万
展开全部
#include<iostream>
#include<string>
using namespace std;
void sort(int,int,int);
int main()
{
int a, b, c;
cout<<"输入三个数"<<endl;
cin>>a>>b>>c;
void(*pf)(int,int,int) \\这里我的理解是创建了一个名字为pf的指针函数,且指针函数里的值为整数类型?
pf=sort; //这里是建立一个函数指针pf,给指针赋值
pf(a,b,c) \\把输入的值给函数,为a,b,c?
return 0; //这里a,b,c为函数的参数,都是int类型,就是上面定义的函数指针类型
}
viod sort (int x,int y,int z); \\因为 pf=sort, 所以对应函数值也一一对应为 a=x,b=y,c=z了?
{ //对的
int temp;
if(x<y)
{
temp=x;
x=y; \\这里我想问下,X Y的位置可以调换么? temp和X的呢?
y=temp;//这里就相当于交换两个杯子的水要对换需要第三个被子临时来用,先将x放入temp或者先将y换入temp都是可以的,只要在交换过程x,y的值都存在,不被覆盖就行了
}
if(x<z)
{
temp=x;
x=z
z=temp
}
fi(y<z)
{
temp=y;
y=z;
z=temp
}
cout<<x<< ">" <<y<< ">" <<z<<endl;
}
额 下半段这个式子我实在有点看不懂了...是将X Y Z中数字的地址调换 从而变换数字所在的位置来达到排序的目的么?
//并不是交换地址,只是将变量的值交换一下
那不用指针对函数 调用, 直接将 函数sort 中的 x y z的值拿来做以上运算也可以达到目的么?
还有pf(a,b,c) 这个指针函数 包括赋值不是没用了么?
麻烦各位大大了 ,谢谢大家帮忙的我会给好心的你追加分的。。谢谢谢谢了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式