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

总结

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)

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

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

相关文章

掌握 Android JNI 基础

写在前面 最近在看一些底层源码&#xff0c;发现 JNI 这块还是有必要系统的看一下&#xff0c;索性就写一写博客&#xff0c;加深加深印象&#x1f37b; 本文重点聊一聊一些干货&#xff0c;避免长篇大论 JNI 概述 JNI 是什么&#xff1f; 定义&#xff1a;Java Native In…

全国网络安全行业职业技能大赛WP

word_sercet 文档被加密 查看图片的属性 在备注可以看到解压密码 解密成功 在选项里面把隐藏的文本显示出来 可以看到ffag easy_encode 得到一个bmp二维码 使用qr research 得到的密文直接放瑞士军刀 base32解码base64解码hex解码 dir_pcap 直接搜索flag 发现flag…

C++ 程序使用 OpenCV 可视化和分析两个图像之间特征点的对应关系

文章目录 代码功能源码文件编译文件 代码功能 创建图像和生成随机特征点&#xff1a; 程序首先创建两个灰度图像&#xff08;m_image_Left_BGR 和 m_image_Right_BGR&#xff09;&#xff0c;并将它们转换为彩色图像。然后&#xff0c;生成两组随机特征点&#xff08;mvKeys 和…

线段树分治总结

线段树分治总结 概念例题二分图 /【模板】线段树分治[HAOI2017] 八纵八横[FJOI2015] 火星商店问题EnvyExtending Set of PointsForced Online Queries Problem「雅礼集训 2018 Day10」贪玩蓝月BZOJ4184-shallot[bzoj4644]经典**题 概念 \qquad 线段树分治一般用来解决带有如下两…

强敌环伺:金融业信息安全威胁分析——整体态势

从早期的Zeus和其他以银行为目标的特洛伊木马程序&#xff0c;到现在的大规模分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;再到新颖的钓鱼攻击和勒索软件&#xff0c;金融服务业已成为遭遇网络犯罪威胁最严重的行业之一。金融服务业的重要性不言而喻&#xff0…

浙政钉(专有钉钉)

专有钉钉是浙政钉的测试版本&#xff0c;可在正式发布之前进行业务开发。 专有钉钉 原名政务钉钉 是高安全、强管控、灵活开放的面向大型组织专有独享的协同办公平台。支持专有云、混合云等多种方式灵活部署&#xff0c;以满足客户特定场景所需为目标&#xff0c;最大化以“平…

Docker 搭建MySQL主从复制-读写分离

一. 介绍 MySQL主从复制是一种常用的数据库高可用性解决方案&#xff0c;通过在主数据库上记录的数据变更&#xff0c;同步到一个或多个从数据库&#xff0c;实现数据的冗余备份和读写分离。在Docker环境下搭建MySQL主从复制和读写分离&#xff0c;不仅方便管理&#xff0c;还…

【干货】【常用电子元器件介绍】【电容】(二)--电容器的主要参数、测量、选择与应用

声明&#xff1a;本人水平有限&#xff0c;博客可能存在部分错误的地方&#xff0c;请广大读者谅解并向本人反馈错误。 一、 电容器的主要参数 1.1 耐压 耐压(Voltage Rating)是指电容器在电路中长期有效地工作而不被击穿所能承受的最大直流电压。对于结构、介质、容量相同的…

Linux--redhat9创建软件仓库

1.插入光盘&#xff0c;挂载镜像 模拟插入光盘: 点击:虚拟机-可移动设备-CD/DVD 设备状态全选&#xff0c;使用ISO影响文件选择当前版本镜像&#xff0c;点击确认。 2.输入: df -h 可以显示&#xff0c;默认/dev/sr0文件为光盘文件&#xff0c;挂载点为/run/media/root/镜像…

Linux(CentOS7)常见指令的常见用法(上)

指令功能hostname查看当前的主机名hostnamectl set-hostname修改主机名adduser添加用户passwd给用户设置密码userdel -r 删除用户ls显示某路径下的文件名ls -l ll 显示某路径下每个文件及其属性ls -la ls -al 显示某路径下所有文件包括隐藏文件及属性ls -d只看指定文件夹&…

ElementUI安装与使用指南

Element官网-安装指南 提醒一下&#xff1a;下面实例讲解是在Mac系统演示的&#xff1b; 一、开发环境配置 电脑需要先安装好node.js和vue2或者vue3 安装Node.js Node.js 中文网 安装node.js命令&#xff1a;brew install node node.js安装完后&#xff0c;输入&#xff1…

第九节HarmonyOS 常用基础组件18-checkBox

1、描述 提供多选框组件&#xff0c;通常用于某选项的打开或关闭。 2、接口 Checkbox(options:{name?: string, group?: string}) 3、参数 参数名 参数类型 必填 描述 name string 否 多选框名称 group string 否 多选框群组名称。&#xff08;未配合使用Chec…

【芯片设计- RTL 数字逻辑设计入门 番外篇 8 -- MBIST 详细介绍】

请阅读【嵌入式开发学习必备专栏 】 文章目录 MBISTMBIST 背景MBIST的主要特点和优势MBIST的工作原理举例 MBIST MBIST&#xff08;Memory Built-In Self-Test&#xff09;是一种在系统级芯片&#xff08;SoC&#xff09;中内置的内建自测试&#xff0c;用于检测和验证片上存储…

centos下静态链接:/usr/bin/ld: cannot find -l某某某

问题&#xff1a;/usr/bin/ld: cannot find -l某某某 前言解法相关文章 前言 我是在静态链接的时候碰到了/usr/bin/ld: cannot find -lstdc的问题&#xff0c;这里来记录一下我是如何解决的。 如果你是动态链接的时候出了问题&#xff0c;可以直接看我给出的倒数第二篇文章&a…

C#,贝尔数(Bell Number)的计算方法与源程序

1 埃里克坦普尔贝尔 贝尔数是组合数学中的一组整数数列&#xff0c;以埃里克坦普尔贝尔&#xff08;Eric Temple Bell&#xff09;命名&#xff0c; 埃里克坦普尔贝尔&#xff08;生于1883年2月7日&#xff0c;苏格兰阿伯丁郡阿伯丁&#xff0c;于1960年12月21日在美国加利福尼…

Abp 创建一个WPF的项目

开发环境&#xff1a;VS2022、.NET6 1、创建项目&#xff1a;MyWpfApp&#xff0c;这里不再废话了。 2、NuGet添加&#xff1a; 2.1、Volo.Abp.Autofac 2.2、Serilog.Sinks.File 2.3、Serilog.Sinks.Async 2.4、Serilog.Extensions.Logging 2.5、Serilog.Extensions.Hos…

算法沉淀——滑动窗口(leetcode真题剖析)

算法沉淀——滑动窗口 01.长度最小的子数组02.无重复字符的最长子串03.最大连续1的个数 III04.将 x 减到 0 的最小操作数05.水果成篮06.找到字符串中所有字母异位词07.串联所有单词的子串08.最小覆盖子串 滑动窗口算法是一种用于解决数组或列表中子数组或子序列问题的有效技巧。…

【C++版】排序算法详解

目录 直接插入排序 希尔排序 选择排序 冒泡排序 堆排序 快速排序 hoare法 挖坑法 前后指针法 非递归版本 快速排序中的优化 归并排序 递归版本 非递归版本 计数排序 总结 直接插入排序 直接插入排序的思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入…

【Java程序设计】【C00174】基于SSM在线医院管理系统(论文+PPT)

基于SSM在线医院管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的在线医院管理系统 本系统分为前台系统、后台管理员、后台医生以及后台用户4个功能模块。 前台系统&#xff1a;当游客打开系统的网址后&#xf…

flask基于python的个人理财备忘录记账提醒系统vue

在当今高度发达的信息中&#xff0c;信息管理改革已成为一种更加广泛和全面的趋势。 “备忘记账系统”是基于Mysql数据库&#xff0c;在python程序设计的基础上实现的。为确保中国经济的持续发展&#xff0c;信息时代日益更新&#xff0c;蓬勃发展。同时&#xff0c;随着信息社…