小樽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…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...