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.mzph.cn/news/863242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1,Windows-本地Linux 系统(WSL)

目录 第一步电脑设置 第二步安装Ubuntu 第三文件传递 开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。 通过适用于 Linux 的 Windows 子系统 (WSL)&#xff0c;开发人员可以安装 Linux 发行版&#xff08;例如 Ubuntu、OpenSUSE、Kali、Debian、Arc…

【子串】3. 无重复的最长子串

3. 无重复的最长子串 难度&#xff1a;中等难度 力扣地址&#xff1a;https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/ 题目看起来简单&#xff0c;刷起来有好几个坑&#xff0c;特此记录一下&#xff0c;解法比官网的更加简单&…

[OtterCTF 2018]Play Time

还是这个程序 。。要找到游戏名字查看 进程 psscan pstree pslist 0x000000007d686b30 Rick And Morty 3820 2728 0x000000000b59a000 2018-08-04 19:32:55 UTC0000 0x000000007d7cb740 LunarMS.exe 708 2728 0x00000000731cb000 2018-08-04 19:27:39 UTC0000…

《昇思25天学习打卡营第12天 | 昇思MindSpore基于MindSpore的GPT2文本摘要》

12天 本节学习了基于MindSpore的GPT2文本摘要。 1.数据集加载与处理 1.1.数据集加载 1.2.数据预处理 2.模型构建 2.1构建GPT2ForSummarization模型 2.2动态学习率 3.模型训练 4.模型推理

支持纳管达梦数据库,命令存储支持对接Elasticsearch 8,JumpServer堡垒机v3.10.11 LTS版本发布

2024年6月24日&#xff0c;JumpServer开源堡垒机正式发布v3.10.11 LTS版本。JumpServer开源项目组将对v3.10 LTS版本提供长期的支持和优化&#xff0c;并定期迭代发布小版本。欢迎广大社区用户升级至v3.10 LTS最新版本&#xff0c;以获得更佳的使用体验。 在JumpServer v3.10.…

Github Page 使用手册(保姆级教程!)

搭建个人网站&#xff1f;没有服务器&#xff1f;那不如尝试一下 Github Page &#xff01; 最近我正好在搭建个人网站&#xff0c;于是就写一篇博客来详细介绍 Github Page 的使用、部署方式吧&#xff01; 一、进入 Github 访问&#xff1a;github.com 如果你没有 github…

Linux中彩色打印

看之前关注下公众号呗 第1部分&#xff1a;引言 1.1 Python在文本处理中的重要性 Python作为一种广泛使用的高级编程语言&#xff0c;以其简洁的语法和强大的功能在文本处理领域占有一席之地。无论是数据清洗、自动化脚本编写&#xff0c;还是复杂的文本分析&#xff0c;Py…

RHCE四---web服务器的高级优化方案

一、Web服务器&#xff08;2&#xff09; 基于https协议的静态网站 概念解释 HTTPS&#xff08;全称&#xff1a;Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext TransferProtocol Secure&#xff0c;超文本传输安全协议&#xff09;&#xff0c;是以…

在Ubuntu 18.04.6 LTS 交叉编译生成Windows 11下的gdb 8.1.1

1. 安装mingw sudo apt-get install mingw-w64 2. 下载 gdb 8.1.1源码 https://ftp.gnu.org/gnu/gdb/gdb-8.1.1.tar.gz 解压命令 tar -xf gdb-8.1.1.tar.gz 进入目录,创建build目录: hq@hq:~/gdb-8.1.1/build$ 执行配置 ../confi

java实现图片添加水印

文章目录 前言一、工具类WatermarkUtil二、工具类介绍2.1 图片来源类型2.2 水印类型2.3 读取本地图片2.4 读取网络图片2.5 水印处理2.6 添加水印 三、测试添加水印总结 前言 给图片添加水印是一个很常见的需求&#xff0c;一般是用来防盗用。比如我们csdn上面写的文章中&#…

【Vue】单向和双向数据绑定

在 Vue.js 中&#xff0c;数据绑定可以分为单向数据绑定和双向数据绑定两种类型。 单向数据绑定 单向数据绑定是指数据从模型流向视图&#xff0c;即数据的变化会自动反映到视图中&#xff0c;但视图中的变化不会自动反映回模型。Vue.js 中的单向数据绑定主要通过以下方式实现…

Linux的fwrite函数

函数原型: 向文件fp中写入writeBuff里面的内容 int fwrite(void*buffer&#xff0c;intsize&#xff0c;intcount&#xff0c;FILE*fp) /* * description : 对已打开的流进行写入数据块 * param ‐ ptr &#xff1a;指向 数据块的指针 * param ‐ size &#xff1a;指定…

无人机赋能工程测绘

勘察设计 业务挑战 采集效率低导致工程周期延长&#xff0c;难以满足及时交付的需求 外业工作量大&#xff0c;人员、时间、设备投入成本高 测绘成果单一&#xff0c;仅限于数字线划图&#xff0c;无法提供可视化模型 无人机优势 快速构建二三维模型&#xff0c;提供丰富…

VUE-CLI脚手架项目的初步创建与配置

目录 1&#xff0c;首先创建一个VUE项目&#xff0c;注意选择版本为 2.6.10 2&#xff0c;打开APP.vue文件&#xff0c;并且删除APP.vue中多余的代码 3&#xff0c;创建index.vue文件 4&#xff0c;在此文件中写入如下图片中的代码来初步创建页面 5&#xff0c;创建router…

pandas数据分析(1)

pandas&#xff0c;即Python数据分析库&#xff08;Python data analysis library&#xff09; DataFrame和Series DataFrame&#xff08;数据帧&#xff09;和Series&#xff08;序列&#xff09;是pandas的核心数据结构。DataFrame的主要组件包含索引、列、数据。DataFrame和…

“论模型驱动架构设计方法及其应用”,软考高级论文,系统架构设计师论文

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法&#xff0c;以模型构造、模型转换和精化为核心&#xff0c;提供了一套软件设计的指导规范。在模型驱动架构环境下&#xff0c;通过创建出机器可读和高度抽象的模型实现对不同问题域的描述&#xff0c;这些模型…

基于QT开发的气体成分检测数据记录软件

1、软件概述 气体成分检测数据记录软件用于实现多种气体分析仪及相关设备实时数据的获取、存储和传送。目前支持的设备主要有气体分析仪、多通道进样阀箱、冷阱处理系统和气体采样处理系统。   气体成分检测数据记录软件可以根据实际应用需要进行配置&#xff0c;以实现不同应…

算法 —— 双指针

目录 移动零 复写零 快乐数 盛最多水的容器 有效三角形的个数 查找总价格为目标值的两个商品 三数之和 四数之和 移动零 下图以样例1为例&#xff0c;看下图如何做到保证非零元素相对顺序前提下&#xff0c;移动零元素。 代码实现如下&#xff1a; class Solution {…

MySQL高级-SQL优化- order by 优化(尽量使用覆盖索引、注意联合索引创建的规则、增大排序缓冲区大小)

文章目录 0、order by优化原则1、Using filesort2、Using index3、连接数据库4、查看索引5、删除索引6、按照年龄进行排序7、执行计划 order by age8、执行计划 order by age,phone9、创建联合索引 (age,phone)10、再次执行计划 order by age11、再次执行计划 order by age,pho…

013、MongoDB常用操作命令与高级特性深度解析

目录 MongoDB常用操作命令与高级特性深度解析 1. 数据库操作的深入探讨 1.1 数据库管理 1.1.1 数据库统计信息 1.1.2 数据库修复 1.1.3 数据库用户管理 1.2 数据库事务 2. 集合操作的高级特性 2.1 固定集合(Capped Collections) 2.2 集合验证(Schema Validation) 2.…