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

news2024/12/28 21:37:13

回调函数

回过头来调用的函数

#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.coloradmin.cn/o/1877525.html

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

相关文章

工业自动化控制中心

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 using System; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms;namespace 工业自动化控制中心 {public partial class Form1 : Form{public Form1(){InitializeComponent();}pri…

2SK241 LTSpice模型及仿真

2SK241是东芝生产的一款NMOS&#xff0c;早已停产&#xff0c;但是在收音机圈子里还是有很多死忠粉&#xff0c;所以在淘宝上也是一堆打磨改标的假货。 言归正传&#xff0c;在矿坛上找到了2SK241的模型&#xff1a; .model M2SK241bottom NMOS(Level1 Rd1 Rs10 Rg50 Kp8mV…

Linux源码-进程描述符

Linux操作系统引入了PCB(Process Control Block,进程控制块)结构。PCB是Linux操作系统识别进程的通道。 创建进程时&#xff0c;首先会创建PCB&#xff0c;根据PCB中的信息对进程实施有效管理。当进程终止后&#xff0c;Linux操作系统会释放对应的PCB资源。 PCB的数据结构是s…

IP定位技术中的网络拓扑分析

IP地址物理位置的高精度定位对于众多应用至关重要&#xff0c;从网络安全监控到个性化内容推荐&#xff0c;从地理定位服务、流量优化策略以及广告分布推广等。IP定位技术作为实现这一目标的关键手段&#xff0c;不断演进和创新&#xff0c;今天就IP定位技术中的网络拓扑分析来…

【面试系列】数据科学家 高频面试题及详细解答

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

HTML5+JavaScript单词游戏

HTML5 JavaScript单词游戏 数据字典格式&#xff1a;每行一个 单词 &#xff0c;单词和解释用空格分隔&#xff0c;如 a art.一(个)&#xff1b;每一(个) ability n.能力&#xff1b;能耐&#xff0c;本领 able a.有能力的&#xff1b;出色的 baby n.婴儿&#xff1b;孩子…

深入浅出:npm 常用命令详解与实践

在现代的前端开发流程中&#xff0c;npm&#xff08;Node Package Manager&#xff09;已经成为了不可或缺的一部分。它不仅帮助我们有效地管理项目中的依赖包&#xff0c;还提供了一系列强大的命令来优化开发体验。在这篇博客中&#xff0c;我们将深入探讨 npm 的常用命令&…

Navicat上新啦

前言 Navicat&#xff0c;在数据库界&#xff0c;几乎是一个神奇的存在&#xff0c;似乎统治了数据库开发工具的“一片天”。且看下图&#xff1a; 红的蓝的绿的橙的…&#xff0c;可以说&#xff0c;留给它的color不多了。 那么商业BI到服务监控、从云托管到云协作&#xff…

Qt事件传递顺序是怎样的?

1、事件传递顺序规则 在Qt中&#xff0c;事件传递的顺序事件首先传递到目标对象的事件过滤器&#xff0c;然后传递到事件处理函数&#xff0c;最后传递到父对象的事件过滤器和事件处理函数。 为了更好地理解这一过程&#xff0c;下面将通过一个示例来展示事件在父窗口和子窗口…

盘点全球Top10大云计算平台最热门技能证书

小李哥花了一年半时间终于考下全球10大云的77张认证&#xff0c;今天盘点下各个云的热门证书&#xff0c;希望能帮到非CS专业转IT和刚刚入行云计算的小伙伴。 排名取自23年Yahoo云计算市场份额排名报告&#xff0c;我会从云平台、证书价格、证书热门程度做推荐。 1️⃣亚马逊云…

微机原理 复习

第一章导论 1.3 冯诺依曼体系结构 &#xff08;1&#xff09;以二进制形式表示指令和数据 &#xff08;2&#xff09;程序和数据事先放在存储器中&#xff08;预存储&#xff09; &#xff08;3&#xff09;由运算器、控制器、输入设备和输出设备五大部件组成 字长、主频…

《昇思25天学习打卡营第6天|onereal》

Vision Transformer&#xff08;ViT&#xff09;简介 近些年&#xff0c;随着基于自注意&#xff08;Self-Attention&#xff09;结构的模型的发展&#xff0c;特别是Transformer模型的提出&#xff0c;极大地促进了自然语言处理模型的发展。由于Transformers的计算效率和可扩…

深度解析:机器学习如何助力GPT-5实现语言理解的飞跃

文章目录 文章前言机器学习在GPT-5中的具体应用模型训练与优化机器翻译与跨语言交流&#xff1a;情感分析与问答系统&#xff1a;集成机器学习功能&#xff1a;文本生成语言理解任务适应 机器学习对GPT-5性能的影响存在的挑战及解决方案技术细节与示例 文章前言 GPT-5是OpenAI公…

昇思25天学习打卡营第11天|SSD目标检测

1. 学习内容复盘 模型简介 SSD&#xff0c;全称Single Shot MultiBox Detector&#xff0c;是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上&#xff0c;SSD对于输入尺寸300x300的网络&#xff0c;达到74.3%mAP(mean Average Precision)…

任意密码重置漏洞

文章目录 1. 任意密码重置漏洞原理2. 任意密码重置漏洞产生原因3. 任意密码重置漏洞场景3.1 验证码爆破3.2 验证凭证回传3.3 验证凭证未绑是用户3.4 跳过验证步骤3.5 凭证可预测3.6 同时向多个账户发送凭证 4. 任意密码重置经典案例4.1 中国人寿某重要系统任意账户密码重置4.2 …

Go Error 处理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

ModuleNotFoundError: No module named ‘_sysconfigdata_x86_64_conda_linux_gnu‘

ModuleNotFoundError: No module named _sysconfigdata_x86_64_conda_linux_gnu 1.软件环境⚙️2.问题描述&#x1f50d;3.解决方法&#x1f421;4.结果预览&#x1f914; 1.软件环境⚙️ Ubuntu 20.04 Python 3.7.0 2.问题描述&#x1f50d; 今天发现更新conda之后&#xff0…

【数据库】Oracle安装报错(win10安装oracle提示环境不满足最低要求)

目录 一、问题场景&#xff1a; 二、问题描述 三、原因分析&#xff1a; 四、解决方案&#xff1a; 一、问题场景&#xff1a; 安装Oracle数据库 二、问题描述 安装之前提示&#xff08; [INS-13001]环境不满足最低要求。 是否确实要继续? &#xff09; 如图所示&…

1-爬虫基础知识(6节课学会爬虫)

1-爬虫基础知识&#xff08;6节课学会爬虫&#xff09; 1.什么是爬虫2.爬取的数据去哪了3.需要的软件和环境4.浏览器的请求&#xff08;1&#xff09;Url&#xff08;2&#xff09;浏览器请求url地址&#xff08;3&#xff09;url地址对应的响应 5.认识HTTP/HTTPS5.1 http协议之…

43.三倍游戏

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/390 题目描述 三倍游戏是一种单人游戏。玩…