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

这是例题: 是一个利用指针函数来 比较并排序的程序
#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) 这个指针函数 包括赋值不是没用了么?
麻烦各位大大了 ,谢谢大家帮忙的我会给好心的你追加分的。。谢谢谢谢了。

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中,实现了两个数的交换,后面的一样
}

}追问

不好意思,楼上的老师 很仔细所以分给他了 我想知道怎么给你补些分,谢谢你的帮助。 各位百度知道里的人都是好人。 不能让你们白回答。 比一比下头那个灌水拿分的人 他真是不知道羞。

追答

不客气,解决问题就好,祝好运,学习进步

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-03-24
你的理解太有问题了,所以看不懂以下的了。
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了。

本回答被提问者采纳
第2个回答  2013-03-04
#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) 这个指针函数 包括赋值不是没用了么?
麻烦各位大大了 ,谢谢大家帮忙的我会给好心的你追加分的。。谢谢谢谢了。

C++指针变量进行函数调用的问题
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 tem...

C++指针、数组、引用、变量作函数参数的问题
1, 变量作为参数,这是单向值传递。即将数据传给被调函数后,与调用函数就不相关了,必须通过函数值返回操作结果。如有函数声明:void swap(int a,int b); \/\/功能是交换a,b值,但事实上对调用函数没有影响,因为swap函数的局部变量a,b在该函数执行完释放掉了,其值也就丢失了。2. 指针、数组...

有关C++函数调用问题。不明白里面的指针和&的用法。
C++调用函数的时候就是转向函数的入口地址,而函数指针就是保存的函数的入口地址所以你使用发fp(a,b)调用就相当于函数名调用你使用(*fp)(a,b)调用相当于把a,b作为参数,传递到fp指向的地址所以效果是一样的其实函数调用的时候使用函数名 f_i(a,b) 和 (*f_i)(a,b) 也能得到正确的结果道理...

C语言与C++ 指针函数调用 乱码 求以下程序结果和详细解释 ,求总结_百度...
程序一: 还是输出1234,因为指针p没有改变,函数调用tstfn(p)内对p的改变,不能应该原值,如果要改变指针p的值,必须传入指针的指针tstfn(&p)。程序二:输出4321,函数调用tstfn(p),传入指针p,在函数内对p指针所指向内容进行修改,原值也改变了。程序三:函数中的临时数组a,a当函数返回时,a所...

c\/c++中的指针的应用及注意问题
int *b,b表示的是指针变量(注意,是b表示指针变量而不是*b),*表示要说明的是指针变量。大家注意int *b[2]和int(*b)[2]是不同的,int *b表示一个指针数组,而int (*b)[2]表示含有两个元素的int指针,这里要注意运算优先级问题,有助于理解指针问题。在这里大概介绍基本概念就够了,...

C++ 指针的引用问题
进入函数时,将CPU的基地址寄存器(ebp)入栈,也就是对象地址,初始化参数后。第一行指令pop,弹栈到寄存器ecx 第二行是将ecx寄存器存入ebp-8的地址中,也就是在对象地址上面8个字节开始存放对象地址。第三行根据this指针取得对象地址,存入寄存器eax。注意这行的指令代码(8B 45 F8)最后一个字节,...

关于c++指针的问题请高手赐教
{ printf("%d\\n",sizeof(a));} 显然应该打印指针大小4,而非数组大小。另外,注意数组参数的地址跟数组参数第一个元素的地址并不相等,在表达式中两者一致,但是在函数调用中,由于数组参数指针也是临时变量,因此两者的地址是不一样的。可以通过下列程序观察:include include void test1(char a[]){...

c++指针数组的的引用问题。
因为它们的类型相同,即它们的类型都是char *。4、是的,你的理解是正确的,指针数组确实是保存的是地址,这点无需怀疑。它之所以输出的是内容而非地址。是因为C++对<<流插入运算符进行了重载,如果右运算符(即右侧的对象)是字符串的地址的话,则会输出它的内容,直至遇到'\\0'为止。

C++类指针在访问的时候何时用"->",何时候用"."
如有:A->B,则可以肯定A是一个结构体指针或类的对象指针,而B是A中的一个成员。以你的便子为例:class A{...假设里面含有一个set()函数...} A a,*p;a是一个对象名,所以可以用a.set(),当然你还可以用(&a)->set( ),两者是等价的。p如果指向一个结构体或对象,可以这样使用其中的...

c++ 父类指针转换为子类指针后调用子类的成员函数,为什么可以调用成功...
父类指针指向子类对象,然后调用子类对象所继承(或改写)的父类方法,这就是面向对象的核心--多态 其实也好理解,子类对象的类型与其父类的类型是共通的,他就是从父类继承来的,如果把子类比父类新增的成员变量或成员函数去掉,他就是一个父类的对象,当然可以调用自己的方法 不过,一般多态不是楼主这么用的...

相似回答