嵌入式学习 Day14

news2024/11/15 22:28:05

一. 三个函数

1.strncpy

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
 }

2.strncat

 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'                       //  手动添加字符串结束标志
 }

2.strncmp

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


char * s1 = "helloaalajldahelloadflajdhellolkahldfjlhello"
strncmp(s1,"hello",5);

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

2.函数 
gets
puts 
strlen
strcpy  /strncpy 
strcat  /strncat 
strcmp  /strncmp 

注意:
1.const 能加都加 ----- 保护数据,避免无意识的修改
2.函数功能 ------ 在实现主要功能的前提下,尽可能写的全面(考虑临界情况) 

指针 + 函数 

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


二. 回调函数

1.形式:

 int funcN()      //自己写的 
 {
 }
 
 main()           //自己写的
 {
    choiceSortN(,funcN);      //别人写的 (留好接口) 
 }

 回调函数: 通过函数指针调用的函数 叫回调函数

(在主调中 调用别人写的函数时,别人写的函数会回过头来调用你自己写的函数) 
 
 技术上: 通过函数指针来实现 ,函数指针(指向基类型-为函数类型) 函数类型的指针 

 eg:函数名  *p        // p即为函数指针

2. qsort

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


  compar 两个参数 其实表示 数组中某两个元素的地址 
  compar 返回值 表示的就是数组中两个元素的大小关系 

void *  //万能指针  --可以接收任意类型的指针

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

练习: 
char s[3][100] = {"hello","world","china"};
用qsort对s进行排序 

#include <stdlib.h>

练习:

写一个程序 实现加,减,乘,除
以回调函数的形式,打印对应的结果 
void processData(int a,int b, int (*pfunc)(int,int))
{
    printf();
}

命令行 输入 
1+2
1-2 
1*2 
1/2 
int a;
int b;
int c;

总结:
1.指针 操作 函数 
2.函数名 就是函数的 入口地址 
3.定义 :一个函数指针变量 获得 函数名 
4.使用 :通过指针变量的方式 进行函数调用 
5.用途 :回调 

char *strcpy(char *dest,const char *src); // 返回值为 指针类型 ---指针函数 

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


三. 指针 + 二维数组 

int  a[3][4];   //本质还是一维数组 
int[4]  a[3];   //理解角度 
                   //a --- 数组名 --- a所代表的数组类型 int [3][4]
                   //a --- 代表的值 --- 数组首元素的地址 --- a[0] 
                  //a[0] 的数据类型 int[4]
                  //&a[0]---对应的数据类型(理解角度int[4] *) int(*)[4] (语法角度)是一个数组类型 (一维整型数组类型)
                  //数组类型的指针 --- 数组指针                   
   

       
int (*p)[4] = a;

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

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

int (*p)[4] = a;

  p                  <=> a           <=> &a[i]

*(p+i)             <=> a[i]        <=> &a[i][0]         //int[4]这种类型的一维数组的数组名

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

练习:
  定义一个二维整型数组,找出数组最大值 
  char a[3][4] 

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

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

相关文章

【Golang】ModbusRTU协议CRC16校验算法

CRC校验码是通过在数据后面附加一个短的校验序列来生成的&#xff0c;用于检测数据在传输过程中是否发生错误。CRC16是一种特定的CRC校验算法&#xff0c;它生成一个16位的校验码。 下面是使用Go语言实现CRC16校验算法的代码&#xff1a; package main import ("encoding…

【01】Linux 基本操作指令

带⭐的为重要指令 &#x1f308; 01、ls 展示当前目录下所有文件&#x1f308; 02、pwd 显示用户当前所在路径&#x1f308; 03、cd 进入指定目录&#x1f308; 04、touch 新建文件&#x1f308; 05、tree 以树形结构展示所有文件⭐ 06、mkdir 新建目录⭐ 07、rmdir 删除目录⭐…

某赛通电子文档安全管理系统 PolicyAjax SQL注入漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…

Linux--redhat9创建软件仓库

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

【操作系统·考研】文件系统基础

1.概述 文件(File)是以硬盘为载体的存储在计算机上的信息集合&#xff0c;文件可以是文本文档、图片、程序等&#xff0c;基本访问单元可以是字节或记录&#xff0c;可以长期储存在硬盘中&#xff0c;并允许可控制的进程间共享访问&#xff0c;还可以被组成成更复杂的结构。 在…

关于 IntelliJ IDEA 中 Schedule for Addition 的问题

IntelliJ IDEA是一款强大的Java集成开发环境&#xff0c;由JetBrAIns公司开发。它以其智能代码编辑、代码分析工具、自动代码补全、强大的调试功能和内建的版本控制等特性而闻名。此外&#xff0c;它还支持Kotlin、Groovy、Scala和Android开发等多种语言和框架。 IntelliJ IDE…

【XR806开发板试用】在 xr806 上用 ncnn 跑神经网络 mnist

在 xr806 上用 ncnn 跑神经网络 mnist 0x0 介绍 xr806 和 ncnn https://xr806.docs.aw-ol.com/ XR806是全志科技旗下子公司广州芯之联研发设计的一款支持WiFi和BLE的高集成度无线MCU芯片&#xff0c;支持鸿蒙L0系统 https://github.com/Tencent/ncnn ncnn是腾讯开源的高性…

纯静态微信小程序水果商城

首页代码 <view class"container"><!-- 轮播图 --><view class"swiper-container"><swiper class"screen-swiper" indicator-dots"true" circular"true" autoplay"true" interval"300…

【开源】基于JAVA+Vue+SpringBoot的数据可视化的智慧河南大屏

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 A4.2 数据模块 B4.3 数据模块 C4.4 数据模块 D4.5 数据模块 E 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数据可视化的智慧河南大屏&#xff0c;包含了GDP、…

Unity:构建游戏和交互应用的强大引擎

Unity&#xff1a;构建游戏和交互应用的强大引擎 在游戏开发和交互应用领域&#xff0c;Unity 已经成为最受欢迎和广泛使用的开发引擎之一。无论是独立开发者、游戏工作室还是企业开发团队&#xff0c;Unity 都提供了强大的工具和功能&#xff0c;帮助开发者构建出令人惊叹的视…

【Prometheus】Prometheus的容器化部署

目录 实验部署 1、创建账户绑定集群 2、node-exporter发现节点 3、创建configmap&#xff0c;传输配置文件&#xff1a; 3.1、热更新修改configmap方式&#xff1a; 4、部署Prometheus&#xff1a; 5、部署service提供外部访问&#xff1a; 6、安装grafana可视化工具&am…

win wsl2 Ubuntu-22.04 设置时间为国内时间

使用 wsl2 安装 Ubuntu-22.04 后 时间不正确&#xff0c;主要有两个原因 时区设置不正确&#xff0c;国内为京八区。 时区正确后&#xff0c;没有同步时间。&#xff08;大部分人容易忽略这一点&#xff09; Linux 默认情况下使用 UTC 格式作为标准时间格式&#xff0c;如果在…

【论文解读】Collaboration Helps Camera Overtake LiDAR in 3D Detection

CoCa3D 摘要引言Collaborative Camera-Only 3D DetectionCollaborative depth estimationCollaborative detection feature learning 实验结论和局限 摘要 与基于 LiDAR 的检测系统相比&#xff0c;仅相机 3D 检测提供了一种经济的解决方案&#xff0c;具有简单的配置来定位 3…

qt语言国际化(翻译),并实现多窗口同时翻译

一、.pro文件中添加支持的语言 在.pro文件中添加下面几句&#xff0c;支持中文和英文 TRANSLATIONS lanague_cn.ts\lanague_en.ts二、通过qt语言家更新翻译生成.ts文件 完成以后在工程目录可以看到.ts文件 三、通过linguist翻译文件 打开文件 将两个文件同时选中&#xf…

(一)PySpark3:安装教程及RDD编程(非常详细)

目录 一、pyspark介绍 二、PySpark安装 三、RDD编程 1、创建RDD 2、常用Action操作 ①collect ②take ③takeSample ④first ⑤count ⑥reduce ⑦foreach ⑧countByKey ⑨saveAsTextFile 3、常用Transformation操作 ①map ②filter ③flatMap ④sample ⑤d…

Matlab plot绘图的 title 语法

x 0:1:10; >> y x.^2 -10*x15; >> plot(x,y) >> title(x_y, interpreter, none) title 里面的 x_y , y不会被当作下标。

数据结构--堆排序(超详细!)

一、前言 堆排序与Top K问题是堆的两大应用&#xff0c;在我们日常也有很广泛的用处 我们已经上面已经说过了堆&#xff0c;这次来说堆的其中一个应用---堆排序。 二、堆排序 堆排序优势在哪里&#xff1f;有什么恐怖之处吗&#xff1f; 重点&#xff1a;拿一个举例&…

你ping一下,服务器累成狗--第二篇

你ping一下&#xff0c;服务器累成狗-目录篇文章浏览阅读1.7k次&#xff0c;点赞65次&#xff0c;收藏20次。我们的电脑怎么干活的https://blog.csdn.net/u010187815/article/details/135796967 你ping一下&#xff0c;服务器累成狗--第一篇文章浏览阅读62次&#xff0c;点赞6…

记录 | ubuntu nm命令的基本使用

什么是nm命令 nm命令是linux下针对某些特定文件的分析工具&#xff0c;能够列出库文件&#xff08;.a、.lib&#xff09;、目标文件&#xff08;*.o&#xff09;、可执行文件的符号表。 nm命令的常用参数 -A 或 -o 或 --print-file-name&#xff1a;打印出每个符号属于的文件…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之DataPanel组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之DataPanel组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、DataPanel组件 数据面板组件&#xff0c;用于将多个数据占比情况使用占比图进…