qsort问题

题库 专栏收录该内容
23 篇文章 0 订阅
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int compare(const void* left,const void* right)
{
	int *p0=(int*)left;//因为定义为void,编译//器不知道指向函数的字节,非法的,所以加///上int,强制类型转换
	int *p1=(int*)right;
	return *p0-*p1;
//比较函数编写规则:(qsort认为)
//1.如果*left应该排在*right前,则函数返回值是负函数
//2.如果*left应该排在*right后,则函数返回值是正函数
//3.如果*left,*right无所谓,则函数返回值是零
}
int sum(int x,int y)
{
	return x+y;
}
int main()
{
	int i;
	int a[10];
	int (*p)(int,int);
	p=sum;
	printf("sum number is %d\n",(*p)(3,5));
	srand(time(NULL));//随机数的输入
	for(i=0;i<10;i++)
	{
		a[i]=rand()%100;
	}
	qsort(a,10,sizeof(int),compare);
	//qsort(a,10,sizeof(int),Compare);在这个调用中,a传递的是a[10]的首地址,10传递的是a[10]数据的个数,Compare传递的是int Compare(const void *elem1, const void *elem2)这个函数的地址,也就是Compare把函数的地址给了qsort,qsort在调用的时候通过Compare的地址来调用的。所以不用给Compare传递参数。
	for(i=0;i<10;i++)
	{
		printf("random number is %d\n",a[i]);
	}
	system("pause");	
}

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值