24/06/24(12.1117)指针进阶 ,冒泡和快排 习题为依托巩固概念(strlen,sizeof,字符串,数组,指针大小的区别)

回调函数

回过头来调用的函数

#include <stdio.h>
#include <stdlib.h>

int Find_Max(int arr[], int n){
    int max_value = arr[0];
    for (int i = 1; i < n; ++i){
        if (max_value < arr[i])
            max_value = arr[i];
    }
    return max_value;
}

int Find_Min(int arr[], int n){
    int min_value = arr[0];
    for (int i = 1; i < n; ++i){
        if (min_value > arr[i])
            min_value = arr[i];
    }
    return min_value;
}
int main(){
    int arr[] = { 5, 8, 9, 2, 3, 1, 0, 4 };
    int n = sizeof(arr) / sizeof (arr[0]);

    printf("max_value = %d\n",Find_Max(arr,n));
    printf("min_value = %d\n",Find_Min(arr, n));
    system("pause");
    return 0;
}

怎么写出一个通用的函数,可以想查找最大就是最大,想查找最小就是最小

#include <stdio.h>
#include <stdlib.h>

int Find_Max(int arr[], int n){
    int max_value = arr[0];
    for (int i = 1; i < n; ++i){
        if (max_value < arr[i])
            max_value = arr[i];
    }
    return max_value;
}

int Find_Min(int arr[], int n){
    int min_value = arr[0];
    for (int i = 1; i < n; ++i){
        if (min_value > arr[i])
            min_value = arr[i];
    }
    return min_value;
}
//
int Find(int arr[], int n, int(*pfun)(int arr[], int n)){//通用
    return pfun(arr, n);
}

int main(){
    int arr[] = { 5, 8, 9, 2, 3, 1, 0, 4 };
    int n = sizeof(arr) / sizeof (arr[0]);

  //  printf("max_value = %d\n",Find_Max(arr,n));
 //   printf("min_value = %d\n",Find_Min(arr, n));
     printf("max_value = %d\n",Find(arr,n,Find_Min));   

        system("pause");
    return 0;
}

只要是有函数参数里有函数参数当参数的就是回调函数.

冒泡排序:

#include <stdio.h>
#include <stdlib.h>

void PrintArr(int arr[], int n){
    for (int i = 0; i < n; i++){
        printf("%d",arr[i]);
    }
    printf("\n");
}
void bob(int arr[],int n){
    for (int i = 0; i < n - 1; i++){
        for (int j = 0; j < n - i - 1; j++){
            if (arr[j] > arr[j + 1]){
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }

        }
    }
}
int main(){
    int arr[] = { 5, 8, 9, 2, 3, 1, 0, 4 };
    int n = sizeof(arr) / sizeof (arr[0]);
    PrintArr(arr, n);
    bob(arr, n);
    PrintArr(arr,n);
    system("pause");
    return 0;
}

改成快速排序:

#include <stdio.h>
#include <stdlib.h>

void PrintArr(int arr[], int n){
    for (int i = 0; i < n; i++){
        printf("%d",arr[i]);
    }
    printf("\n");
}
void bob(int arr[],int n){
    for (int i = 0; i < n - 1; i++){
        for (int j = 0; j < n - i - 1; j++){
            if (arr[j] > arr[j + 1]){
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }

        }
    }
}
int comp_int(const void *a, const void *b){
    const int *pa = (const int*)a;
    const int *pb = (const int*)b;
    return (*pa - *pb);
}
int main(){
    int arr[] = { 5, 8, 9, 2, 3, 1, 0, 4 };
    int n = sizeof(arr) / sizeof (arr[0]);
    PrintArr(arr, n);
    //bob(arr, n);
    qsort(arr, n, sizeof(int), comp_int);
    PrintArr(arr,n);
    system("pause");
    return 0;
}

简单的概念强化:

#include <stdio.h>
#include <stdlib.h>


int main(){
    char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f', };

    printf("%d\n", sizeof(arr)); // 6
    printf("%d\n", sizeof(arr + 0)); // 4(一个地址的大小)
    printf("%d\n", sizeof(*arr)); // 1
    printf("%d\n", sizeof(arr[1])); // 1
    printf("%d\n", sizeof(&arr)); // 4
    printf("%d\n", sizeof(&arr[0] + 1)); //4 
    printf("%d\n", sizeof(&arr + 1)); // 4
    printf("%d\n", strlen(arr)); // ?(随机数)
    printf("%d\n", strlen(arr + 0)); //  ?
    printf("%d\n", strlen(*arr)); // 无(取的是一个字符,没法求字符串长度)
    printf("%d\n", strlen(arr[1])); // 无
    printf("%d\n", strlen(&arr)); // ?
    printf("%d\n", strlen(&arr + 1)); // ?
    printf("%d\n", strlen(&arr[0] + 1)); // ?

    system("pause");
    return 0;
}

#include <stdio.h>
#include <stdlib.h>


int main(){
    char arr[] ="abcdef";

    printf("%d\n", sizeof(arr)); // 7
    printf("%d\n", sizeof(arr + 0)); // 4(一个地址的大小)
    printf("%d\n", sizeof(*arr)); // 1
    printf("%d\n", sizeof(arr[1])); // 1
    printf("%d\n", sizeof(&arr)); // 4
    printf("%d\n", sizeof(&arr[0] + 1)); //4 
    printf("%d\n", sizeof(&arr + 1)); // 4
    printf("%d\n", strlen(arr)); // 6
    printf("%d\n", strlen(arr + 0)); //  6
    //printf("%d\n", strlen(*arr)); // 无
    //printf("%d\n", strlen(arr[1])); // 无
    printf("%d\n", strlen(&arr)); // 6
    printf("%d\n", strlen(&arr + 1)); // ?
    printf("%d\n", strlen(&arr[0] + 1)); // 5

    system("pause");
    return 0;
}

#include <stdio.h>
#include <stdlib.h>


int main(){
    char *p ="abcdef";

    printf("%d\n", sizeof(p)); // 4
    printf("%d\n", sizeof(p + 0)); // 4(一个地址的大小)
    printf("%d\n", sizeof(*p)); // 1
    printf("%d\n", sizeof(p[0])); // 1
    printf("%d\n", sizeof(&p)); // 4
    printf("%d\n", sizeof(&p[0] + 1)); //4 
    printf("%d\n", sizeof(&p + 1)); // 4
    printf("%d\n", strlen(p)); // 6
    printf("%d\n", strlen(p + 1)); //  5
    //printf("%d\n", strlen(*p)); // 无
    //printf("%d\n", strlen(p[0])); // 无
    printf("%d\n", strlen(&p)); // ?
    printf("%d\n", strlen(&p + 1)); // ?
    printf("%d\n", strlen(&p[0] + 1)); // 5

    system("pause");
    return 0;
}

总结:数组名的意义:

1.sizeof(数组名),这里数组名表示整个数组,计算的是整个数组的大小.

2.&数组名,这里的数组名表示整个数组,去除的是整个数组的地址.

3.除此之外所有的数组名都表示首元素的地址.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/756721.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据资产驱动的智能化转型之路:深入解析数据资产在数字化转型中的核心作用,构建全面、智能的数据资产解决方案,助力企业实现智能化运营和决策,引领行业创新

目录 一、引言 二、数据资产在数字化转型中的核心作用 1、决策支持 2、业务优化 3、创新驱动 4、风险管理 三、构建全面、智能的数据资产解决方案 1、数据资产战略规划 2、数据资产采集与整合 3、数据资产治理 4、数据资产分析与挖掘 5、数据资产应用与服务 四、数…

二叉树的层序遍历/后序遍历(leetcode104二叉树的最大深度、111二叉树的最小深度)(华为OD悄悄话、数组二叉树)

104二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 本题可以使用前序&#xff08;中左右&#xff09;&#xff0c;也可以使用后序遍历&#xff08;左右中&#xff09;&#xff0c;…

【MySQL】数据库——存储引擎

一、存储引擎概述 1.概念 MySQL中的数据用各种不同的技术存储在文件中&#xff0c;每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力&#xff0c;这些不同的技术以及配套的功能在MySQL中称为存储引擎存储引擎是MySQL将数据存储在文件系统中的存…

数字化转型中,通过客户画像寻找触达客户经济路径

在当今数字化高速发展的时代&#xff0c;企业的数字化转型势在必行。其中&#xff0c;如何通过客户画像找到触达客户经济路径成为关键所在。 客户画像&#xff0c;是对客户全方位信息的精细描绘&#xff0c;涵盖了年龄、性别、地域、消费习惯、兴趣爱好等众多维度。这就如同为…

大模型和数据库最新结合进展

写在前面 本文主要内容是上次接受 infoQ 访谈&#xff0c;百度智能云朱洁老师介绍了大模型和 AI 结合相关话题&#xff0c;这次整体再刷新下&#xff0c;给到对这个领域感兴趣的同学。 当前&#xff0c;百度智能云云数据库特惠专场开始&#xff01;热销规格新用户免费使用&am…

前端技术栈学习:Vue2、Vue cli脚手架、ElementUI组件库、Axios

1 基本介绍 &#xff08;1&#xff09;Vue 是一个前端框架, 易于构建用户界面 &#xff08;2&#xff09;Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或项目整合 &#xff08;3&#xff09;支持和其它类库结合使用 &#xff08;4&#…

mysql数据库的主从复制

MySQL主从复制的应用场景 当只有一台MySQL服务器要负责读写时&#xff0c;对于安全性&#xff0c;高可用&#xff0c;高并发等需求就不能满足&#xff0c;因此就要建立集群&#xff0c;集群的基础就是主从复制。 原理&#xff08;过程&#xff09; MySQL支持的复制类型 基于语…

守护你的每一步:揭秘电子厂劳保鞋的秘密

在电子厂的繁忙车间里&#xff0c;工友们忙碌的身影中&#xff0c;你是否注意到那一双双看似普通的劳保鞋&#xff1f;它们不仅承载着工人们辛勤的汗水&#xff0c;更是守护他们每一步安全的重要装备。今天&#xff0c;就让我们一起揭秘电子厂劳保鞋的秘密&#xff0c;看看它们…

Springcloud-消息总线-Bus

1.消息总线在微服务中的应用 BUS- 消息总线-将消息变更发送给所有的服务节点。 在微服务架构的系统中&#xff0c;通常我们会使用消息代理来构建一个Topic&#xff0c;让所有 服务节点监听这个主题&#xff0c;当生产者向topic中发送变更时&#xff0c;这个主题产生的消息会被…

【论文阅读】transformer及其变体

写在前面&#xff1a; transformer模型已经是老生常谈的一个东西&#xff0c;以transformer为基础出现了很多变体和文章&#xff0c;Informer、autoformer、itransformer等等都是顶刊顶会。一提到transformer自然就是注意力机制&#xff0c;变体更是数不胜数&#xff0c;一提到…

解决error Error: certificate has expired问题

安装环境遇到下面问题&#xff1a; 产生原因&#xff1a;可能是开了服务器代理访问导致ssl安全证书失效 解决办法&#xff1a; 在终端输入以下命令&#xff1a; yarn config set "strict-ssl" false -g

Element UI搭建使用过程

本章内容基于上一篇---Vue-cli搭建项目基础版 Vue-cli搭建项目----基础版-CSDN博客 官网地址:Element - The worlds most popular Vue UI framework 介绍:完全基于Vue.js ,用于快速搭建用户界面. 第一步:安装ElementUI 在终端输入 npm i element-ui -S 在main.js输入 …

《SpringBoot+Vue》Chapter04 SpringBoot整合Web开发

返回JSON数据 默认实现 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>在springboot web依赖中加入了jackson-databind作为JSON处理器 创建一个实体类对象…

Python逻辑控制语句 之 判断语句--if、if else 和逻辑运算符结合

逻辑运算符&#xff1a; and or not 1.案例一 需求&#xff1a; 1. 获取⽤户输⼊的⽤户名和密码 2. 判断⽤户名是 admin 并且密码是 123456 时, 在控制台输出: 登录成功! 3. 否则在控制台输出: 登录信息错误! # 需求&#xff1a; # 1. 获取用户输入的用户名和密码 # 2. 判断…

Vue3使用jsbarcode生成条形码,以及循环生成条形码

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;我是前端菜鸟的自我修养&#xff01;今天给大家分享Vue3使用jsbarcode生成条形码&#xff0c;以及循环生成条形码&#xff0c;介绍了JsBarcode插件的详细使用方法&#xff0c;并提供具体代码帮助大家深入理解&#xff0c;彻…

005-GeoGebra基础篇-GeoGebra的点

新手刚开始操作GeoGebra的时候一般都会恨之入骨&#xff0c;因为有些操作不进行学习确实有些难以凭自己发现。 目录 一、点的基本操作1. 通过工具界面添加点2. 关于点的选择&#xff08;对象选择通用方法&#xff09;&#xff08;1&#xff09;选择工具法&#xff08;2&#xf…

synchronized 锁优化原理

目录 一、轻量级锁 二、锁膨胀 三、自旋优化 四、偏向锁 五、锁消除 一、轻量级锁 1. 会创建一个锁记录 Lock Record&#xff08;保存在线程栈中&#xff09;&#xff0c;尝试 CAS 修改 Mark Word 中的对象头&#xff0c;是一种乐观锁的思想&#xff0c;而不是将 Java 对…

如何选择适合的接口自动化测试工具!

引言&#xff1a; 在现代软件开发中&#xff0c;接口自动化测试已经成为保证软件质量的重要环节。通过自动化测试工具&#xff0c;可以有效地提高测试效率、减少人力成本&#xff0c;并且能够更好地发现和解决潜在的问题。然而&#xff0c;面对众多的接口自动化测试工具&#…

React+TS前台项目实战(十九)-- 全局常用组件封装:带加载状态和清除等功能的Input组件实现

文章目录 前言Input组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天我们来封装一个input输入框组件&#xff0c;并提供一些常用的功能&#xff0c;你可以选择不同的 尺寸、添加前缀、显示加载状态、触发回调函数、自定义样式 等等。这些功能在这个项目中…

数据结构-分析期末选择题考点(排序)

何似清歌倚桃李 一炉沈水醉红灯 契子 ✨ 上一期给大家提供了大概会考的题型给老铁们复习的大致思路 这一期还会是一样&#xff0c;我将整理一下排序的题型以及解题方法给你们 由于时间还很多&#xff0c;我就慢慢总结吧&#xff0c;一天一章的样子&#xff0c;明天总结串、后天…