首页 > 其他分享 >DAY8

DAY8

时间:2023-07-30 10:55:04浏览次数:31  
标签:compare DAY8 temp int void include 函数

函数指针使用案例(回调函数)

  1. 代码:

#include <stdio.h>
void A(){
    printf("Hello");
} 
void B(void (*ptr)())//B函数有一个函数指针作为它的参数 
{                   //ptr指向一个函数,这个函数应该是不带参数的而且返回void,就像A那样 
    ptr();//使用函数指针ptr调用它所指向的函数 
}
int main(){
    void (*p)() = A;//把p初始化为A的地址 
    B(p);//d调用B,向它传入指针p 
}

输出结果:

Hello
  1. 写成这样同样可以,因为函数的名字返回的就是指针(函数名就是地址)

int main(){
    B(A);
}

一个函数的引用传给另一个函数的时候,那个函数就被称作回调函数,所以,A在这里就是一个回调函数。函数B可以通过函数指针来回调它

  1. 想以升序排列数组

#include <stdio.h>
void BubbleSort(int *A,int n){
    int i,j,temp;
    for(i=0;i<n;i++){
        for(j=0;j<n-1;j++){
            if(A[j] > A[j+1]){
                temp = A[j];
                A[j] = A[j+1];
                A[j+1] = temp;
            }
        }
    } 
} //用了冒泡法 ,在冒泡排序中进行多轮比较 
int main(){
    int i;
    int A[] = {3,2,1,5,6,4};
    BubbleSort(A,6);
    for(i=0;i<6;i++){
        printf("%d ",A[i]);
    }
}

输出结果:

1 2 3 4 5 6
  1. 想用降序排列:只用把大于改成小于

    if(A[j] < A[j+1]){
                temp = A[j];
                A[j] = A[j+1];
                A[j+1] = temp;
            }
  1. 我们可以多传一个参数给排列函数,告诉它我想要升序还是降序,我们可以有一个标志,比如标志是1的时候我们升序排列,为0时降序,这样可以避免很多冗余的代码

#include <stdio.h>
int compare(int a,int b){
    if(a > b){
        return 1;
    }else return -1;
}
void BubbleSort(int *A,int n,int (*compare)(int,int)){
    int i,j,temp;
    for(i=0;i<n;i++){
        for(j=0;j<n-1;j++){
            if(compare(A[j],A[j+1]) > 0){
                temp = A[j];
                A[j] = A[j+1];
                A[j+1] = temp;
            }
        }
    } 
} //用了冒泡法 ,在冒泡排序中进行多轮比较 
int main(){
    int i;
    int A[] = {3,2,1,5,6,4};
    BubbleSort(A,6,compare);
    for(i=0;i<6;i++){
        printf("%d ",A[i]);
    }
}

输出结果:

1 2 3 4 5 6
  1. 降序排列

int compare(int a,int b){
    if(a > b){
        return -1;
    }else return 1;
}
  1. 按照绝对值大小排序

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int absolute_compare(int a,int b){
    if(abs(a) > abs(b)){
        return 1;
    }else return -1;
}
void BubbleSort(int *A,int n,int (*compare)(int,int)){
    int i,j,temp;
    for(i=0;i<n;i++){
        for(j=0;j<n-1;j++){
            if(compare(A[j],A[j+1]) > 0){
                temp = A[j];
                A[j] = A[j+1];
                A[j+1] = temp;
            }
        }
    } 
} //用了冒泡法 ,在冒泡排序中进行多轮比较 
int main(){
    int i;
    int A[] = {-3,2,1,-5,6,4};
    BubbleSort(A,6,absolute_compare);
    for(i=0;i<6;i++){
        printf("%d ",A[i]);
    }
}

输出结果:

1 2 -3 4 -5 6
  1. 这样做的目的是可以实现多种要求的排序,比如按绝对值大小排序

#include <math.h>
#include <stdlib.h>
int compare(const void* a, const void* b){//比较函数 
    int A = *((int*)a); //把它转换成整型指针 然后用*来解引用 
    int B = *((int*)b);
    return abs(A) - abs(B);
}
int main(){
    int i;
    int A[] = {-3,2,1,-5,6,4};
    qsort(A,6,sizeof(int),compare); 
    for(i=0;i<6;i++){
        printf("%d ",A[i]);
    } 
}
​

输出结果:

1 2 -3 4 -5 6

在比较函数中,待比较的元素是通过引用来传的,他们的地址通过指针来传

标签:compare,DAY8,temp,int,void,include,函数
From: https://www.cnblogs.com/ninnne/p/17591126.html

相关文章

  • day83(2023.7.19)
    1.使用SqlSession操作数据库 2.Mapper动态代理原理3. MyBatis新增 运行结果:4.MyBatis修改没优化前: 优化后:(只需写一次就ok了) 运行结果:4.MyBatis删除、根据Id查询 运行结果: 5.根据ID查询用户和运行结......
  • day8
    一、验证码1.打开后得到一堆jpg,根据名字猜测是将所有jpg上的数字获取下来,然后进行某种运算,网上找一下python识别验证码的脚本,但是我的这个识别出来有问题,有一位是d,但应该是0点击查看代码importddddocrtmp=''ocr=ddddocr.DdddOcr()f1=open('1.txt','wb')foriinr......
  • day82(2023.7.5)
    1.什么是框架? ......
  • day81(2023.7.3)
    1.依赖冲突调解_最短路径优先原则 2.依赖冲突调解_最先声明原则3.依赖冲突调解_排除依赖、锁定版本 4.Maven聚合开发_聚合关系 5.Maven聚合开发_继承关系6.Maven聚合案例_搭建父工程7.Maven聚合案例_搭建dao模块8.Mave......
  • 算法练习-day8
    字符串28.找出字符串中第一个匹配项的下标题意:给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果needle不是haystack的一部分,则返回-1。示例:    思路:本题有两种思路:1.暴力求解法,只需要一次遍历,以i为haystack字......
  • python day8
    第一阶段第六章6.10数据容器(序列) ......
  • 小灰灰深度学习day8——线性回归(从零开始实现与简洁的实现)
    从零开始实现的代码如下:importmathimportrandom#随机梯度下降随机的权重importtimeimportnumpyasnpfromd2limporttorchasd2l#实现过的函数写在d2l包中'''加这两句是为了能画出散点图,不然会报错importosos.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"'......
  • 【安全学习之路】Day8
    开搞开搞。......
  • 代码随想录Day8|字符串
    主要是学了java的字符串用法,题目不是很难使用StringBuilder类型可以节省时间,关于这个类型的添加和使用chartemp=sb.charAt(start);sb.setCharAt(start,sb.charAt(end));sb.setCharAt(end,temp);151.翻转字符串里的单词 https://leetcode.cn/problems/reverse-words......
  • MySQL学习基础篇Day8
    5.7多表查询案例数据环境准备:createtablesalgrade(gradeint,losalint,hisalint)comment'薪资等级表';insertintosalgradevalues(1,0,3000);insertintosalgradevalues(2,3001,5000);insertintosalgradevalues(3,5001,8000);insertin......