注册 登录
编程论坛 C++教室

这个帮忙讲解一下下

於晓琪123 发布于 2014-11-13 22:22, 394 次点击
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
bool BigThan(int x,int y)
{
    return x>y;
}
void Sort(int *start ,int*end,bool(*fname)(int ,int));
int main()
{
    int a[10];
    int i;
    for(i=0;i<10;i++)
    {    a[i]=rand();
    cout<<a[i]<<" ";
    }
    cout<<endl;
    Sort(a,a+10,BigThan);
    for(i=0;i<10;i++)
        cout<<a[i]<<" ";
    cout<<endl;
     return 0;
}
void Sort(int*start,int*end,bool(*fname)(int,int))
{
    int*p,*q;
    for(q=start;q<end-1;q++)
    {
        if(fname(*(q+1),*q))
            swap(*q,*(q+1));
    }
}
第一 boolBigThan 为什么要返回想x>y 第二*fname 怎么解释为什么会跟bigthan 联系在一起啊
1 回复
#2
天使梦魔2014-11-14 12:25
BigThan返回值是一个bool,所以当x大于y的时候返回真,否则假

第二参数原型bool (*fname)(int,int),该参数是一个函数指针,可以指向任何返回值是bool并且带两个整形参数的指针。
本方法出自早期C程序,知道的时候是在做强制性C符号导出dll引用,就是说我有个dll,但没有该dll的函数声明,接口是在软件下查到导出符号,只有一个dll程序但要用里面的功能,大概意思就是这样,然后就使用该方法强制指向函数口。
不过这样有个致命的缺点,就是很像goto,很容易引起奔溃

考虑以下程序
程序代码:
#include <iostream>
using namespace std;
bool youtest(void)
{
    cout<<"这是一个测试";
    return 1;
}
bool (*mytest)(void)=youtest;//mytest指向youtest
int main()
{
    mytest();//指针指向youtest地址,当使用mytest的时候会转到youtest内存
    cin.get();
    return 0;
}

1