指针操作一维字符型数组和及回调函数------努力学习嵌入式的第十四天!今天的内容让人脑瓜子嗡嗡的 着重复习

news2024/11/15 11:01:30

总结

1.快速排序

注意:

  第二三步并不能反过来  要想降序排列只需要加将比较的符号换一下

2.指针操作一维字符型数组

(const) char *s = "hello";

*s='H';    //错误

char s[]="hello";

s[0] = 'B'

char *strncpy(char *dest, const char *src, size_t n)

{  
   正常拷贝 
   多了 一个n 
   n < strlen(src)  
     只拷贝前n个字符,最终dest中不会有'\0'
   n == strlen(src)
     正常拷贝 
   n > strlen(src)
   if (n) 拷贝够了次数 
   剩余拷贝 统统补0

}
     思路:
   
   // 结束条件 *src == '\0'
   // n次 拷贝完成没有

char *Strcpy(char *dest,const char *src)
{
	char *ret = dest;

	while (*dest = *src)
	{
		dest++;
		src++;
	}

	return ret;
}


char *Strncpy(char *dest,const char *src,size_t n)
{
	char *ret = dest;

	while (n && (*dest = *src) )
	{
		dest++;
		src++;
		--n;
	}
	//printf("n= %ld\n",n);
	while(n)
	{
		*dest = 0;
		++dest;
		--n;
	}
	return ret;
}

char *strncat(char *dest, const char *src, size_t n)

 {
   拼接的基础上 多 n控制条件 
   
   n < strlen(src) 拼n下就结束   n == 0
    
   n >= strlen(src) src拼完就结束  src=='\0'
   
   *dest = '\0' //?
 }

char * Strcat(char *dest, const char *src)
{
	char *ret = dest;

	while (*dest != '\0')
		dest++;

	while((*dest = *src) != '\0')
	{
		dest++;
		src++;
	}

	return ret;
}

char * Strncat(char *dest, const char *src,int n)
{
	char *ret = dest;

	while (*dest != '\0')
		dest++;

	//
	//hello'\0' 
	while(n && *src != '\0')
	{
		*dest = *src;
		dest++;
		src++;
		--n;
	}
	*dest = '\0';

	return ret;
}

 int Strncmp(const char *s1, const char *s2, size_t n)
 

int Strcmp(const char *s1,const char *s2)
{
	while (*s1==*s2 && *s1!='\0' && *s2 != '\0')
	{
		++s1;
		++s2;
	}

	return *s1 - *s2;
}

int Strncmp(const char *s1,const char *s2,int n)
{

	//3 
	//2
	//1
	n--;
	while (n&&*s1==*s2 && *s1!='\0' && *s2 != '\0')
	{
		++s1;
		++s2;
	    --n;
	}

	return *s1 - *s2;
}

总结:

1.指针操作一维字符型数组(字符串)

2.函数

grts

puts

strlen

strcpy/strncpy

strcap/strncat

strcmp/strncmp

注意:

1.const 能加的都加

2.函数功能尽可能写的全面

指针+函数

char *strcpy();//返回值类型是指针类型的函数

char *strcap();

回调函数

回调函数:通过函数指针调用的函数叫回调函数
技术上:通过函数指针的实现
函数指针(指向基类型-为函数类型)函数类型的指针

接口

void qsort(void *base,size_t nmemb,size_t size, int (*compar) (const void *,const void *));
@base    数组起始位置
@nmemb    排序的元素个数
@size      单个元素的大小
@compar   比较函数       / /确定进行比较的两个元素的大小规则

void * //万能指针------任意类型性的指针

          //void型

注意:如果通过该类型的地址进行数据访问  一定要转转换成明确的基类型。

总结:

1.指针操作函数

2.函数名就是函数入口地址

3.定义一个函数指针便变量获得函数名

4.使用:通过指针变量获得函数名

5.用途:回调

函数指针 -- 函数的指针  --- 返回的类型是函数类型的 指针 
指针函数 -- 指针的函数  --- 返回值为指针类型 的函数 

指针+二维数组

int a[3][4];  //本质还是一维数组

int[3] a[4];  //理解角度

                    //a----数组名---代表类型----代表类型是 int[3][4]

                   //a代表的值是首元素的地址-----a[0]

                   //a[0]的数据类型是int [4]

                    //&a[0]-----对应的数据类型 int (*)[4]

                     //数组类型的指针是数组指针

*p   //三步运算完成后
     *p 相当于 是 int[4]这种类型 //数组
     *p 就相当于 int[4]这个数组的 数组名

*p <=> a     

*(*(p+i) + j)<=>a[i][j]

p+1       //偏移到了 下一个 int[4]
             //类型为int(*)[4]
*(p+1)     //偏移到下一个int 
               //*(p+1) 代表的类型int[4] 此时相当于是 int[4]的数组名 
               //*(*(p+1) + 1)

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

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

相关文章

05 SB3之Spring Initializr+运行方式+自动配置原理(TBD)

1. 使用IDEA内置Spring Initializr 生成SB项目 最上方Server URL可以选择借助哪个平台生成, 可选阿里云 作为对比 , 官方可选版本最旧为3.1.18 ; 阿里云可选最新版本为3.0.2 本次选择3.1.8版本, 并且添加Spring Web依赖(包括RESTful / Spring MVC/)和Lombok依赖 生成后端项目…

力扣hot100 单词搜索 深度优先搜索 特殊字符判重

Problem: 79. 单词搜索 Code class Solution{int n, m;char[][] b;String word;int[] dx { 1, 0, -1, 0 };int[] dy { 0, 1, 0, -1 };public boolean exist(char[][] board, String word){b board;this.word word;n b.length;m b[0].length; // 以所有点作为起点来进行…

关于 PostgreSQL,你了解多少

背景 最近因工作原因&#xff0c;了解到了阿里的 hologre&#xff0c;它只支持 psql 协议&#xff0c;用起来跟 mysql 会差很多&#xff0c;也很不习惯。所以就好奇&#xff0c;为啥放着mysql不用&#xff0c;却用 psql 什么是 psql psql 是 开源的关系型数据库管理系统 Pos…

vuex store,mutations,getters,actions

文章目录 1.vuex概述2.构建vuex【多组件数据共享】环境Son1.vueSon2.vueApp.vue 3.创建一个空仓库4.如何提供&访问vuex的数据①核心概念 - state状态1.通过store直接访问2.通过辅助函数简化代码 ②核心概念 - mutations&#xff08;粗略&#xff09; 5.核心概念 - mutation…

vue3之echarts3D环柱饼图

vue3之echarts3D环柱饼图 效果&#xff1a; 版本 "echarts": "^5.4.1", "echarts-gl": "^2.0.9" 核心代码&#xff1a; <template><div class"content"><div ref"eCharts" class"chart&…

【Docker】linux、nginx、容器镜像三者基本概念

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

【数据结构 04】单链表

一、链表简介 链表是一种物理存储结构上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表在结构上的分类&#xff1a; 1. 带头结点或无头结点 2. 单向或双向 3. 循环或非循环 虽然链表有多种结构类型&#xff0c;但是我么在实际开发中…

算法设计与分析实验:并查集与生成树

目录 一、情侣牵手 1.1 采用并查集的思想 1.2 采用动态规划的思想 二、账户合并 2.1 具体思路 2.2 思路呈现 2.3 代码实现 2.4 复杂度分析 三、连接所有点的最小费用 3.1 思路一&#xff1a;最小生成树 3.2 思路二&#xff1a;并查集 鸡汤 一、情侣牵手 力扣第765…

Django模型(五)

一、数据的条件查询 参考文档:QuerySet API 参考 | Django 文档 | Django 1.1、常用检索字段 字段检索,是在字段名后加 __ 双下划线,再加关键字,类似 SQL 语句中的 where 后面的部分, 如: 字段名__关键字 exact :判断是否等于value,一般不使用,而直接使用 =contai…

数据与资源可视化——长安链运维监控实践

前言 “链上的交易总量是多少”&#xff0c;“我的链上现在有多少区块了”&#xff0c;“节点是否存活无法第一时间感知到”&#xff0c;除sdk查询链上的相关信息外&#xff0c;今天我们介绍一种新的方式实现链上数据与相关资源的可视化的监控。 简介 监控链上数据以及链上节…

日志资源成本减少 35%:新东方可观测体系改造如何降本增效?

一分钟精华速览 在双减政策影响下&#xff0c;新东方面临业务缩减和资源紧张的局面&#xff0c;迫切需要技术调整和优化以应对成本压力并提高效率。面对人手减少、技术标准化不足和技术栈复杂等挑战&#xff0c;公司制定了通过建立标准化的可观测性体系来提升运维和研发效率的…

初始化爱情的构造之旅

初始化爱情的构造之旅 The Constructive Journey of Initializing Love 在一个名为“编程之城”的奇幻世界里&#xff0c;住着两位年轻的程序员——林浩然和杨凌芸。林浩然是Java王国中的首席对象设计师&#xff0c;擅长用代码构建复杂而精巧的对象&#xff1b;而杨凌芸则是数据…

专业138总分420+中国科学技术大学843信号与系统考研经验中科大电子信息通信

**今年中科大专业课843信号与系统138分&#xff0c;总分420顺利上岸&#xff0c;梦圆中科大&#xff0c;也是报了高考失利的遗憾&#xff0c;总结一下自己的复习经历&#xff0c;希望可以给大家提供参考。**首先&#xff0c;中科大843包括信号与系统&#xff0c;和数字信号处理…

Cache Lab:Part B- 32 ×32【分块算法】

任务描述 在B部分中&#xff0c;您将在trans.c中编写一个转置函数&#xff0c;从而导致尽可能少的miss。缓存的参数位 (s 5, E 1, b 5)。三种测试用例的矩阵大小分别为&#xff1a; • 32 32 (M 32, N 32) • 64 64 (M 64, N 64) • 61 67 (…

继电器模块详解

继电器&#xff0c;一种常见的电控制装置&#xff0c;其应用几乎无处不在。在家庭生活&#xff0c;继电器被广泛应用于照明系统、电视机、空调等电器设备的控制&#xff1b;在工业领域&#xff0c;它们用于控制电机、泵站、生产线等高功率设备的运行&#xff1b;继电器还在通信…

mini-spring|设计与实现资源加载器并从Spring.xml解析和注册Bean对象

**需求&#xff1a;**我们需要自动为bean加载资源&#xff0c;代替注册、注入属性、注入bean等功能 1.资源加载器属于相对独立的部分&#xff0c;它位于 Spring 框架核心包下的IO实现内容&#xff0c;主要用于处理Class、本地和云环境中的文件信息。 2.当资源可以加载后&#…

假期刷题打卡--Day18

1、MT1168阶乘数 输入正整数N&#xff0c;找出它是否是一个等于其他数的阶乘值的数&#xff0c;输出YES或者NO。 格式 输入格式&#xff1a; 输入正整数N 输出格式&#xff1a; 输出YES或者NO 样例 1 输入&#xff1a; 5输出&#xff1a; NO 相关知识点 阶乘 可以理…

研发人员如何做好日常工作的稳定性保障

一、前言 二、稳定性介绍 三、实际操作流程 1、需求分析阶段 2、设计阶段 2、1备选架构 2、2方案设计 2、3 架构设计 2、4设计的checklist 2、5的checklist 3、开发联调 4、自测环节 5、上线前环节 6、上线后的验收和复盘 四、稳定性、效率、成本之间的考量 五、…

12306 真的很拉跨吗?春运是对它最大的误解!

春节降至&#xff0c;大家都抢到火车票了吗&#xff1f;马上就要迎来春节&#xff0c;是不是都在吐槽 12306 的种种不好&#xff0c;它真的有这么拉跨吗&#xff1f; 其实不然&#xff0c;每到各种节假日&#xff0c;都是对 12306 最大的误解&#xff01; 特别是春运&#xf…

Vite+Vue3使用Vue-i18n笔记

一、下载依赖 vue-i18n yarn add vue-i18n创建存放语言文件的目录 以及配置文件的配置 我是在src/lang 新建index.ts、cn.ts、en.ts以及test文件夹其中再分别新建cn.ts以及en.ts /lang/index.ts 用于导出vue-i18n需要的配置对象 import en from "./en.ts"; import…