小樽C++ 多章⑧ (叁) 指针与字符串、(肆) 函数与指针
目录
叁、函数与字符串
肆、函数与指针
4.1 指针作为函数参数
4.2 函数返回指针
4.3 函数指针与函数指针数组
4.4 结构体指针
小樽C++ 多章⑧ (壹) 指针变量
https://blog.csdn.net/weixin_44775255/article/details/129031168
小樽C++ 多章⑧ (贰) 指针与数组
https://blog.csdn.net/weixin_44775255/article/details/129396791
叁、函数与字符串
说道字符串,我们要导入字符串库:#include<cstring>
学会字符串的常用方法。strcpy,strcmp,strstr,strlen。
//字符串
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[100],b[100];
int main(){strcpy(a,"hello");
// cout<<a<<endl;printf("%s,len=%d\n",a,strlen(a)); //字符串长度 scanf("%s",b);int cmp = strcmp(a,b); //字符串比较大小 if(cmp==0){printf("%s=%s\n",a,b);}else if(cmp<0){printf("%s<%s\n",a,b);}else{printf("%s>%s\n",a,b);}if(strstr(a,b)!= NULL){ //查找子串 printf("%s in %s\n",b,a); }return 0;
}

难点:具体来看看strcpy、strlen的来历
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char *strcpy(char *dest,const char *scr){char *p=dest;while(*scr != '\0'){*dest = *scr;dest++;scr++;}*dest = '\0';return p;
}
int main(){char *a=new char;*strcpy(a,"cvbnm");cout<<a<<endl;*strcpy(a,"asd");cout<<a;return 0;
}
strcpy 是 赋值的含义,把某个已知的字符串值赋值到a变量,输出a变量就有值了。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
size_t strlen(const char *str){const char *cp = str;while (*cp++){;}return (cp-str-1);
}
int main(){cout<<strlen("abcdr")<<endl;
}

这些函数的实现都是指针操作!虽然也可以用数组来实现,但数组的存储效率会低一些。
肆、函数与指针
4.1 指针作为函数参数
自定义函数的参数可以有整型、浮点型,那可不可以用指针类型?
那来试试用指针参数实现交换两个变量的值。
例子1.交换两个值,再比比大小。
#include<iostream>
#include<cstdio>
using namespace std;
void swap(int *x,int *y){ //交换两个值 int t = *x;*x = *y;*y = t;
}
void sort(int *x,int *y,int *z){ if(*x > *y) swap(x,y); //比大小 if(*x > *z) swap(x,z);if(*y > *z) swap(y,z);
}
int main(){int a,b,c;scanf("%d%d%d",&a,&b,&c);sort(&a,&b,&c);printf("a=%d,b=%d,c=%d",a,b,c);return 0;
}

4.2 函数返回指针
用指针作为函数, 例如:int *a(int a,int b)。
炼1.实现一个包含n个整数的数组中找到第一个质数,若有则返回函数的地址,没则返回NULL。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int n,a[1000];
bool isprime(int n){//求质数 if (n<2) return false;if(n==2) return true;for(int i=2;i<=sqrt(n);i++){if(n%i==0){return false;}} return true;
} int *find(){ //指针查找函数 for(int i=1;i<=n;i++){if(isprime(a[i])){return &a[i];}}return NULL;
}
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}int *p = find();if(p != NULL){cout<<p<<" "<<*p;}return 0;
}

4.3 函数指针与函数指针数组
(1) 一般定义函数: int test(int ); 那换成指针函数 int (*test)( int );
注意不可以写成: int *test ( int ); 这样子编程会 声明定义成 test ( int )的函数,返回类型是 int * 。
(2) 获取函数的地址。 跟数组一样,函数名就是地址,函数名也可看成是指针。
1.用 typedef 声明函数指针类型
#include<iostream>
#include<cstdio>
using namespace std;
//函数指针
int sum(int a,int b){return a+b;
}
typedef int (*LP)(int,int);
//定义声明了LP类型的函数指针,内有2个参数。
int main(){LP p = sum; // 定义LP类型的指针p cout<<p(2,5); //函数指针p调用参数return 0;
}
2.模拟菜单功能实现例子,函数指针数组
//函数指针数组
void t1(){ cout<<"test1"<<endl; }
void t2(){ cout<<"test2"<<endl; }
void t3(){ cout<<"test3"<<endl; }
void t4(){ cout<<"test4"<<endl; }
typedef void(*Tp)();
定义声明了空类型的函数指针 Tp,无参数。
int main(){Tp a[] = {t1,t2,t3,t4}; 定义TP类型的函数指针数组a int x;cin>>x;a[x](); return 0;
}

4.4 结构体指针
- 定义一个结构体,有名字、性别、成绩成员。
- 声明结构体并赋值,还声明结构体指针;
#include<iostream>
#include<cstdio>
using namespace std;
struct Student{char name[20];char sex;float score;
};Student *p;
Student stu={"lisi",'m',95.5};
- 3.指针访问结构体成员方法:
- (*指针名).成员名 (*p).name
- 指针名->成员名 p->name
int main(){cout<<stu.name<<endl;p = &stu; //指针指向stu地址 cout<<(*p).name<<endl;
// (*p).name 效果等同 stu.namecout<<(*p).sex<<endl;cout<<p->score;
// p->score 效果等同(*p).scorereturn 0;
}

由于一般引用结构体变量,通常要对整个的结构体进行引用,效率不高;所以一般用指针会提高写效率。
相关文章:
小樽C++ 多章⑧ (叁) 指针与字符串、(肆) 函数与指针
目录 叁、函数与字符串 肆、函数与指针 4.1 指针作为函数参数 4.2 函数返回指针 4.3 函数指针与函数指针数组 4.4 结构体指针 小樽C 多章⑧ (壹) 指针变量https://blog.csdn.net/weixin_44775255/article/details/129031168 小樽C 多章⑧ …...
Mybatis-Plus
新建个项目 引入lombok devtools web mysql驱动 pom.xml引入mybatis-plus依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version> </dependency> sp…...
yolov8行人识别教程(2023年毕业设计+源码)
yolov8识别视频直接上YOLOv8的结构图吧,小伙伴们可以直接和YOLOv5进行对比,看看能找到或者猜到有什么不同的地方? Backbone:使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻…...
CAD指令框找不到了怎么调出来?CAD指令框调出方法
CAD制图过程中,为了提高设计师的绘图效率,经常会用到各种CAD命令快捷键,可是CAD指令框突然不见了,这就让人很头疼了。CAD指令框找不到了怎么调出来呢?本节内容小编以浩辰CAD软件为例来给大家分享一下CAD指令框调出方法…...
一般用哪些工具做大数据可视化分析?
做数据分析这些年来,从刚开始的死磕excel,到现在成为数据分析行业的偷懒大户,使用过的工具还真不少! 这篇分享一些我在可视化工具上的使用心得,由简单到复杂,按照可视化类型一共分为纯统计图表类、GIS地图…...
Python每日一练(20230308)
目录 1. Excel表列名称 ★ 2. 同构字符串 ★★ 3. 分割回文串 II ★★★ 🌟 每日一练刷题专栏 C/C 每日一练 专栏 Python 每日一练 专栏 1. Excel表列名称 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。 例如࿱…...
jvm之堆解读
堆(Heap)的核心概述 堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区…...
重构·改善既有代码的设计.02
前言之前在《重构改善既有代码的设计.01》中初步了解了重构的基本前提,基础原则等入门知识。今天我们继续第二更......识别代码的坏味道Duplicated Code 重复代码。最单纯的Duplicated Code就是“同一个类中含有相同的表达式”或“两个互为兄弟的子类内含有相同表达…...
脑电信号处理总成
目录一. EEG(脑电图)1.1 脑波1.2 伪迹1.2.1 眼动伪迹1.2.2 肌电伪迹1.2.3 运动伪迹1.2.4 心电伪迹1.2.5 血管波伪迹1.2.6 50Hz和静电干扰1.3 伪迹去除方法1.3.1 避免伪迹产生法1.3.2 直接移除法1.3.3 伪迹消除法一. EEG(脑电图) 1.1 脑波 脑波(英语:br…...
判断推理之图形推理
考点一动态位置变化(一)平移1.特征:图形在平面上的移动,图形本身的大小和形状不发生改变。2.方向:直线(上下、左右、斜对角线),绕圈(顺时针、逆时针)3.距离&a…...
【预告】ORACLE Unifier v22.12 虚拟机发布
引言 离ORACLE Primavera Unifier 最新系统 v22.12已过去了3个多月,应盆友需要,也为方便大家体验,我近日将构建最新的Unifier的虚拟环境,届时将分享给大家,最终可通过VMWare vsphere (esxi) / workstation 或Oracle …...
Sql执行流程与Redo log、 Undo log、 Bin log日志文件
文章目录Sql执行流程与日志文件Sql的执行流程Redo LogBin logUndo logSql执行流程与日志文件 Sql的执行流程 mysql的内部组件结构如下图所示 连接器 与客户端建立连接,检验登录密码,分配相应权限 查询缓存 执行sql语句时会先从这里找一下,…...
如何提高软件测试执行力
高效的测试执行力 不管在哪个行业,高校的执行力都是不可或缺的。在软件测试行业更是这样。有些测试人员,很勤奋也很吃苦,但是可能最终不能很好的完成测试任务。究其原因就是一个测试执行力的问题。 高效执行就是有目标,有计划&…...
Open3D 计算点到平面的距离
目录 一、算法原理二、代码实现三、结果展示一、算法原理 平面外一点 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x...
DDD领域驱动设计初探
DDD 强调领域模型要兼顾业务和技术两个视角。 我们怎么用一套系统化的方法,抽丝剥茧、一步一步地把需求落实到代码呢?咱们看看下面这张图,它表示了领域驱动设计中的主要流程。 领域驱动设计主要的开发流程你可以看到,在整个开发流…...
C中AES_cbc_encrypt加密对应java中的解密
前言知识: 1.AES(Advanced Encryption Standard)高级加密标准,作为分组密码(把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文)。 2.在AES标准…...
演化算法:乌鸦搜索算法 (Crow Search Algorithm)
前言 如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。 在机器学习中,我们所要优化的问题很多时候难以求导,因此通常会采用一些演化算法(又称零…...
基于open62541的OPC UA服务器和客户端开发技术
一、OPC UA的基本概念 1、OPC(OLE for Process Control),是一个工业标准,管理这个标准的国际组织是OPC基金会; 2、OPC通信结构:是指包含一个或多个OPC客户端与服务器相互通信的集合。以下是一个简单的流程图:标准的C/S结构。 3、OPC服务器:TOPC基金会定义了四种;...
测试测开面试要知道的那些事01
列表与元组的区别列表是动态数组,它们可变且可以重设长度(改变其内部元素的个数)。元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变。元组缓存于Python运行时环境,这意味着我们每次使用元组时无…...
物联网毕设 -- 智能厨房监测系统(改)
前言 在家庭生活中,厨房是必不可少的,所以厨房的安全问题关乎着我们大家的生命,所以提出智能厨房监测系统,目的就是为我们减少不必要的安全问题 ⚠️⚠️(本文章仅提供思路和实现方法,并不包含代码&#x…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...
