自学内容网 自学内容网

c语言中“qsort函数”和“结构体成员访问变量”

qsort函数:

qsort是c语言中的库函数,这个函数是对数据进行排序(对任意)

冒泡排序中排列整数顺序用的函数只适用于整形,而qsort函数适用与所有数据

排序算法

冒泡排序

插入

选择

快速

void qsort{

   void * base;   //base指向的排序数组的第一个元素的指针

   size_t num;     //base指向数组中元素的个数

   size_t size;     //base指向数组中一个元素的大小,单位是字节

   int (*cmp)(const void*,const void*);

};

排列浮点型数组字符串结构体:不同的是两个元素之间的比较方式不同

  两个字符串的比较大小不能使用> ,>=, <, <=, !=, ==,应该有strcmp

  strcmp函数不是比较字符串的长度,而是对应字符所占字节的大小。

//先测试qsort来排序整形

void test1(){

    int arr[] = {1 2 4 6 7 8 9 43 }

    int  sz=sizeof(arr) / sizeof(arr[0]);

    qsort (arr , sz , sizeof(arr[0]) , cmp_int);

    print_arr();

}

对函数返回值有要求,比较两个p1,p2的整型

int cmp_int(const void*p1,const void *p2){

return *(int*)p1 - *(int*)p2;      //直接比较两个整数的大小了

}

比较两个结构体:

张三      李四

20          35

185        170    是比较年龄还是身高呢?

qsort给了一个函数指针,来比较结构体。

//用test2来排序结构体数据

Struct Stu{

char name[20];    //名字是字符串

int age;                //字符串比较用strcmp函数

}

//按照名字来比较

p1强制类型转换,才可以用。需要包含头文件#include<string.h>

void  test2(){

    struct Stu arr[]={{"zhangsan ",20},{"lisi",35},{"wangwu",18};

    int sz=sizeof(arr)/sizeof(arr[0]);

    qsort(arr , sz , sizeof(arr[0]) , com_stu_by_name);

}

int cmp_stu_by_name(const void *p1,const void *p2){

     return  strcmp(((struct stu*)p1->name,((struct stu*)p2)->name);

}

//按照年龄进行访问

void  test3(){

    struct Stu arr[]={{"zhangsan ",20},{"lisi",35},{"wangwu",18};

    int sz=sizeof(arr)/sizeof(arr[0]);

    qsort(arr , sz , sizeof(arr[0]) , com_stu_by_age);

}

int cmp_stu_by_age(const void *p1,const void *p2){

     return  strcmp(((struct stu*)p1->age,((struct stu*)p2)->age);

}

结构体成员访问变量

struct Stu{

char name[20];

int age;

}

int main(){

struct Stu s={"zhangsan",20};

printf("%s %d\n",s.name,s.age);          

struct Stu *s=&s;                                        //  结构体成员访问操作符:

printf("%s %d\n",(*ps).name,(*ps).age);     // . :结构体变量 成员名

pritnf("%s %d\n",ps->name,ps->age);       //->: 结构体指针->成员名

return 0;

}


原文地址:https://blog.csdn.net/2401_83201682/article/details/142420915

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!