关于一道C++编程内容中的疑问

来源:百度知道 编辑:UC知道 时间:2024/05/26 08:01:35
#include<iostream>
//#include<stdlib.h>//一、这行有什么用的?
using namespace std;
int cmp(const void* a,const void* b)
{
int x, y;
x=*(int*)a; y=*(int*)b;/*二、这行是什么意思?麻烦尽量详细点!*/
return x-y;
}

int main()
{
int x[4]={5,2,4,1},i;
qsort(x,4,sizeof(int),cmp);
for(i=0;i<4;i++)
cout<<x[i]<<" ";
cout<<endl;
return 0;
}
qsort(x,4,sizeof(int),cmp); 这行又怎么解释?

一.我用过这几个stdlib.h中的函数:atoi itoa qsort malloc free exit rand 二.就是把指针ab转换成整型指针再取该指针指向的整型值 这是qsort的固定用法 多用用就熟了
总之cmp函数就是等于返回0 大于返回正正整数 小于返回负整数 这是qsort固定用法 记住就行了

//#include<stdlib.h>//一、这行有什么用的?
这一行如果没有//的话是使用C的标准输出输入头文件
x=*(int*)a; y=*(int*)b;这一句是a是无类型指针,用(int*)强制转换成整形指针,再前面一个*是,指向这个指针的地址,也就是值,说简单点就是把a指针所指的数据赋给x,y=*(int*)b和前面说的相同。
-------------------------------------
qsort(x,4,sizeof(int),cmp);是对x数组进行排序

因为 void*所以a是无类型指针。后面强制定义了~~

一、是一行注释.如果没有//的话是使用C语言的标准库
二、对a进行强制类型转换,并赋值给x.
(int*)a//将a转换成int*型指针
*(int*)a//整型指针(int*)a指向的值.
x=*(int*)a//把a当作整型指针那样使用,其指向的值赋给x
这种转换是C语言风格的旧式转换(不安全)
三、qsort是排序函数.前三个参数不用多说.而最后一个参数是一个函数(的名字).它使用时相当于一个指向函数的指针.参考C++ Primer中文第四版, 指向函数的指针(第七章第九节,237页).