二维数组 数组指针 排序函数qsort

#define _CRT_SECURE_NO_WARNINGS//必须放在第一行
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>

/*
* C标准规定:函数名也表示函数的入口地址,函数Max==&Max
* 函数指针可以指向相同类型的函数族
* void qsort(
   void *base,//数组起始地址
   size_t num,//数组长度
   size_t width,//每个单元字节数
   int (__cdecl *compare )(const void *, const void *) //比较规则
);


* 作业1:动态创建二维数组,使用完后销毁 ,如何验证,加入数组名为brr,brr[0][0] = 1;
*/

int Cmp_int(const void* vp1, const void* vp2)
{
    return *(int*)vp1 - *(int*)vp2;
}

int Cmp_double(const void* vp1, const void* vp2)
{
    double a = *(double*)vp1;
    double b = *(double*)vp2;
    if (a > b)
        return 1;
    else if (a < b)
        return -1;
    else
        return 0;
}

//找出数据超过一半的数字.例如 1,2,1,3,1;  1,3,1,3,2,3,3
//算法1:排序;2.返回中间值
int Find(int* arr, int len)
{
    qsort(arr,len,sizeof(int),Cmp_int);
    //void* vp1 = arr;
    //*vp1;//error
    //vp1 + 1;
    return arr[len / 2];
}

void Show(double* arr, int len)
{
    for (int i = 0; i < len; i++)
        printf("%.1f ",arr[i]);
    printf("\n");
}

//函数指针的应用
int main()
{
    /*char a = 'A';
    short b = 10;
    int c = 100;
    void* vp1 = &a;
    vp1 = &b;
    vp1 = &c;*/

    int arr[] = {1,2,3,45,67,89,90,12,34,15,67,88,99,16};
    int len = sizeof(arr) / sizeof(arr[0]);
    qsort(arr,len,sizeof(int), Cmp_int);

    double brr[] = {12.3,12.4,12.2,34.5,22.2,35.6,23.1};
    int len2 = sizeof(brr) / sizeof(brr[0]);
    qsort(brr,len2,sizeof(double),Cmp_double);
    Show(brr,len2);

    short crr[] = {10,13,11,2,5,7,9,15,67,89.21};
    //todo 
    //qsort;
    //Show;

    return 0;
}


/*
int max(int a, int b)
{
    return a > b ? a : b;
}

int Min(int a, int b)
{
    return a < b ? a : b;
}

int Avg(int a, int b)
{
    return (a + b) / 2;
}

int Max5()
{
    return 0;
}
int Max2(int a)
{
    return 0;
}
void Max3(int a, int b)
{}
int Max4(int a, short b)
{
    return 0;
}

int main()
{
    int f1();
    int* f2();//f2是个函数,没有参数,返回值为int*
    int f3(int*, int*);
    int* f4(int *,int *);
    int (*f5)(int, int);//f5一定是指针,指向函数,这个函数两个int作为参数,返回值为int
                              //指向函数的指针,简称函数指针
                              //这个指针可以指向 int  x(int,int);这个函数族
    f5 = &max;
    printf("%d\n",( * f5)(10, 20));

    f5 = Min;//等同&Min
    printf("%d\n",f5(100,200));

    //f5 = Max5;//error
    //f5 = Max2;//error
    //f5 = Max3;//error
    //f5 = Max4;//error

    return 0;
}
*/

#if 0
//void Fun(int** brr)//error
void Fun(int (*brr)[4],int row,int col)//这个函数只能使用row行,4列的二维数组
{}

//愿望:处理row行,col列的二维数组

void Fun2(int* brr, int row, int col)
{}

void Fun1(int* arr, int len)
{}

int main()
{
    int* p1;
    int a[10];
    int* p = a;
    int * b[10];//[]优先级高于*,b一定是数组,长度为10,每个单元类型为int的数组
                     //保存指针的数组,指针数组

    int(*c)[4];//c一定是指针,指向长度为4,类型为int的数组
                  //指向数组的指针,简称 数组指针
    int brr[3][4];
    int(*p2)[4] = brr;
    Fun(brr,3,4);
    int crr[5][4];
    Fun(crr,5,4);
    int drr[5][5];
    //Fun(drr,5,5);
    //printf("%p,%p\n",brr,brr+1);
    //int crr[4] = brr[0];//error
    //int crr[4];
    //crr = brr[0];//error
    int* p3 = brr[0];
    int k = 1;
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 4; j++)
        { 
            //printf("%p,", &brr[i][j]);
            brr[i][j] = k++;
            printf("%d ",brr[i][j]);
        }
        printf("\n");
    }
    printf("brr[0][4]=%d\n",brr[0][4]);

    return 0;
}
#endif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值