当前位置: 首页 > news >正文

小樽C++ 多章⑧ (叁) 指针与字符串、(肆) 函数与指针

目录

叁、函数与字符串

肆、函数与指针

4.1 指针作为函数参数

4.2 函数返回指针

4.3 函数指针与函数指针数组

4.4 结构体指针 


​​​​​​​​​​​​​​小樽C++ 多章⑧ (壹) 指针变量icon-default.png?t=N176https://blog.csdn.net/weixin_44775255/article/details/129031168

小樽C++ 多章⑧ (贰) 指针与数组icon-default.png?t=N176https://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 结构体指针 

  1. 定义一个结构体,有名字、性别、成绩成员。
  2. 声明结构体并赋值,还声明结构体指针;
#include<iostream>
#include<cstdio> 
using namespace std;
struct Student{char name[20];char sex;float score;
};Student *p;
Student stu={"lisi",'m',95.5};
  1. 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的结构图吧&#xff0c;小伙伴们可以直接和YOLOv5进行对比&#xff0c;看看能找到或者猜到有什么不同的地方&#xff1f; Backbone&#xff1a;使用的依旧是CSP的思想&#xff0c;不过YOLOv5中的C3模块被替换成了C2f模块&#xff0c;实现了进一步的轻…...

CAD指令框找不到了怎么调出来?CAD指令框调出方法

CAD制图过程中&#xff0c;为了提高设计师的绘图效率&#xff0c;经常会用到各种CAD命令快捷键&#xff0c;可是CAD指令框突然不见了&#xff0c;这就让人很头疼了。CAD指令框找不到了怎么调出来呢&#xff1f;本节内容小编以浩辰CAD软件为例来给大家分享一下CAD指令框调出方法…...

一般用哪些工具做大数据可视化分析?

做数据分析这些年来&#xff0c;从刚开始的死磕excel&#xff0c;到现在成为数据分析行业的偷懒大户&#xff0c;使用过的工具还真不少&#xff01; 这篇分享一些我在可视化工具上的使用心得&#xff0c;由简单到复杂&#xff0c;按照可视化类型一共分为纯统计图表类、GIS地图…...

Python每日一练(20230308)

目录 1. Excel表列名称 ★ 2. 同构字符串 ★★ 3. 分割回文串 II ★★★ &#x1f31f; 每日一练刷题专栏 C/C 每日一练 ​专栏 Python 每日一练 专栏 1. Excel表列名称 给你一个整数 columnNumber &#xff0c;返回它在 Excel 表中相对应的列名称。 例如&#xff1…...

jvm之堆解读

堆&#xff08;Heap&#xff09;的核心概述 堆针对一个JVM进程来说是唯一的&#xff0c;也就是一个进程只有一个JVM&#xff0c;但是进程包含多个线程&#xff0c;他们是共享同一堆空间的。 一个JVM实例只存在一个堆内存&#xff0c;堆也是Java内存管理的核心区域。 Java堆区…...

重构·改善既有代码的设计.02

前言之前在《重构改善既有代码的设计.01》中初步了解了重构的基本前提&#xff0c;基础原则等入门知识。今天我们继续第二更......识别代码的坏味道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 脑波 脑波&#xff08;英语&#xff1a;br…...

判断推理之图形推理

考点一动态位置变化&#xff08;一&#xff09;平移1.特征&#xff1a;图形在平面上的移动&#xff0c;图形本身的大小和形状不发生改变。2.方向&#xff1a;直线&#xff08;上下、左右、斜对角线&#xff09;&#xff0c;绕圈&#xff08;顺时针、逆时针&#xff09;3.距离&a…...

【预告】ORACLE Unifier v22.12 虚拟机发布

引言 离ORACLE Primavera Unifier 最新系统 v22.12已过去了3个多月&#xff0c;应盆友需要&#xff0c;也为方便大家体验&#xff0c;我近日将构建最新的Unifier的虚拟环境&#xff0c;届时将分享给大家&#xff0c;最终可通过VMWare vsphere (esxi) / workstation 或Oracle …...

Sql执行流程与Redo log、 Undo log、 Bin log日志文件

文章目录Sql执行流程与日志文件Sql的执行流程Redo LogBin logUndo logSql执行流程与日志文件 Sql的执行流程 mysql的内部组件结构如下图所示 连接器 与客户端建立连接&#xff0c;检验登录密码&#xff0c;分配相应权限 查询缓存 执行sql语句时会先从这里找一下&#xff0c;…...

如何提高软件测试执行力

高效的测试执行力 不管在哪个行业&#xff0c;高校的执行力都是不可或缺的。在软件测试行业更是这样。有些测试人员&#xff0c;很勤奋也很吃苦&#xff0c;但是可能最终不能很好的完成测试任务。究其原因就是一个测试执行力的问题。 高效执行就是有目标&#xff0c;有计划&…...

Open3D 计算点到平面的距离

目录 一、算法原理二、代码实现三、结果展示一、算法原理 平面外一点 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x...

DDD领域驱动设计初探

DDD 强调领域模型要兼顾业务和技术两个视角。 我们怎么用一套系统化的方法&#xff0c;抽丝剥茧、一步一步地把需求落实到代码呢&#xff1f;咱们看看下面这张图&#xff0c;它表示了领域驱动设计中的主要流程。 领域驱动设计主要的开发流程你可以看到&#xff0c;在整个开发流…...

C中AES_cbc_encrypt加密对应java中的解密

前言知识&#xff1a; 1.AES&#xff08;Advanced Encryption Standard&#xff09;高级加密标准&#xff0c;作为分组密码&#xff08;把明文分成一组一组的&#xff0c;每组长度相等&#xff0c;每次加密一组数据&#xff0c;直到加密完整个明文&#xff09;。 2.在AES标准…...

演化算法:乌鸦搜索算法 (Crow Search Algorithm)

前言 如果你对这篇文章感兴趣&#xff0c;可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」&#xff0c;查看完整博客分类与对应链接。 在机器学习中&#xff0c;我们所要优化的问题很多时候难以求导&#xff0c;因此通常会采用一些演化算法&#xff08;又称零…...

基于open62541的OPC UA服务器和客户端开发技术

一、OPC UA的基本概念 1、OPC(OLE for Process Control),是一个工业标准,管理这个标准的国际组织是OPC基金会; 2、OPC通信结构:是指包含一个或多个OPC客户端与服务器相互通信的集合。以下是一个简单的流程图:标准的C/S结构。 3、OPC服务器:TOPC基金会定义了四种;...

测试测开面试要知道的那些事01

列表与元组的区别列表是动态数组&#xff0c;它们可变且可以重设长度&#xff08;改变其内部元素的个数&#xff09;。元组是静态数组&#xff0c;它们不可变&#xff0c;且其内部数据一旦创建便无法改变。元组缓存于Python运行时环境&#xff0c;这意味着我们每次使用元组时无…...

物联网毕设 -- 智能厨房监测系统(改)

前言 在家庭生活中&#xff0c;厨房是必不可少的&#xff0c;所以厨房的安全问题关乎着我们大家的生命&#xff0c;所以提出智能厨房监测系统&#xff0c;目的就是为我们减少不必要的安全问题 ⚠️⚠️&#xff08;本文章仅提供思路和实现方法&#xff0c;并不包含代码&#x…...

解决SlowFast环境配置中的‘No module named torch._six’等疑难杂症:从修改压缩包到调整import路径

SlowFast环境配置深度排障指南&#xff1a;从源码修改到路径调整的完整解决方案 在视频理解领域&#xff0c;SlowFast作为Facebook Research开源的优秀框架&#xff0c;凭借其双路径网络设计在动作识别任务中表现出色。然而&#xff0c;许多开发者在环境配置阶段就会遭遇各种&q…...

8款降AI工具实测:知网维普全过,毕业季改稿不踩坑

每到毕业季&#xff0c;不少同学都会卡在论文AIGC检测这一关&#xff1a;熬了好几个通宵打磨的稿子&#xff0c;一查AI率直接飙到80%以上&#xff0c;被导师打回要求重改&#xff0c;眼看提交截止日一天天临近&#xff0c;越急越不知道从哪下手。其实现在主流的AI检测算法早就有…...

Pixel Couplet Gen实操手册:微信小程序分包加载优化像素春联H5首屏速度

Pixel Couplet Gen实操手册&#xff1a;微信小程序分包加载优化像素春联H5首屏速度 1. 项目背景与核心价值 Pixel Couplet Gen是一款融合传统春节文化与现代像素艺术风格的创新应用。通过ModelScope大模型的文本生成能力&#xff0c;结合精心设计的8-bit视觉元素&#xff0c;…...

intv_ai_mk11企业应用案例:如何将intv_ai_mk11集成进内部知识库与客服预处理流程

intv_ai_mk11企业应用案例&#xff1a;如何将intv_ai_mk11集成进内部知识库与客服预处理流程 1. 企业面临的挑战与AI解决方案 在当今企业运营中&#xff0c;知识管理和客户服务是两大核心痛点。许多企业面临以下问题&#xff1a; 知识库利用率低&#xff1a;员工难以快速找到…...

三菱现代自动擦窗机器人PLC软件:后发产品介绍及技术细节

三菱 现代自动擦窗机器人PLC软件 我们主要的后发送的产品有&#xff0c;带解释的梯形图接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面 界面多种组态可供选择上周刚帮一个三菱现代贴牌擦窗机的小客户把新软件迭代完&#xff0c;顺便攒了一套带人话解释的梯形图、不…...

OpenClaw技能扩展实战:安装Phi-3-vision-128k-instruct专用图文处理模块

OpenClaw技能扩展实战&#xff1a;安装Phi-3-vision-128k-instruct专用图文处理模块 1. 为什么需要专用技能模块&#xff1f; 上周我在整理技术文档时遇到一个典型场景&#xff1a;需要将十几份混杂着截图和文字说明的会议纪要&#xff0c;自动转换成结构化的Markdown文件。当…...

利用快马平台与openclaw切换模型功能,快速构建待办事项应用原型

最近在尝试快速构建一个待办事项应用的原型时&#xff0c;发现InsCode(快马)平台的AI代码生成功能特别适合这种场景。通过平台内置的openclaw切换模型功能&#xff0c;可以快速比较不同AI模型生成的代码风格差异&#xff0c;大大缩短了原型开发周期。下面分享下我的实践过程&am…...

IP-Adapter-FaceID在社交媒体中的应用:内容创作与分享

IP-Adapter-FaceID在社交媒体中的应用&#xff1a;内容创作与分享 【免费下载链接】IP-Adapter-FaceID 项目地址: https://ai.gitcode.com/hf_mirrors/h94/IP-Adapter-FaceID IP-Adapter-FaceID是一款基于Stable Diffusion的AI人脸生成工具&#xff0c;它通过面部识别模…...

Ostrakon-VL 模型推理加速实战:使用 .accelerate 库优化扫描速度

Ostrakon-VL 模型推理加速实战&#xff1a;使用 .accelerate 库优化扫描速度 1. 效果惊艳的开场 最近在测试Ostrakon-VL模型时&#xff0c;我发现了一个令人惊喜的事实&#xff1a;通过.accelerate库的几项简单优化&#xff0c;模型推理速度可以提升3倍以上&#xff0c;同时显…...

如何用Mi-Create实现小米穿戴设备表盘个性化设计?

如何用Mi-Create实现小米穿戴设备表盘个性化设计&#xff1f; 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create Mi-Create是一款专为2021年及以后发布的小米穿戴…...