指针在函数的应用(C++)

 一、传递地址

    实参传递进函数体内后,生成的是实参的副本,在函数内改变副本的值并不影响实参。指针传递参数时,指针变量产生了副本,但副本与原变量指向的内存区域是同一个。改变指针副本指向的变量,就是改变原指针变量指向的变量。

调用自定义函数交换两个变量的值 

运行结果如下所示。 

 swap函数是自定义的重载函数,在main函数中调用该函数交换变量a和b的值。

 

 二、指向函数的指针

    指针变量可以指向一个函数。一个函数在编译时被分配给一个入口地址,这个函数入口地址就称为函数的指针。

     一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。返回指针值的函数简称为指针函数。

 定义指针函数的一般形式为:

类型名 *函数名(参数列表);

 使用指针函数进行平均值计算

运行结果如下所示。

 

三、从函数中返回指针 

定义一个返回指针类型的函数,形式如下:

int* fun(参数列表){...;   //执行过程return p; 
}

 p是一个指针变量,也可以是&value的地址值。当函数返回一个指针变量时,得到的是地址值。

指针做返回值 

运行结果如下所示。 

 值为NULL的指针地址为0,但不意味这块内存不可以使用。

 

四、指针数组 

    一维指针数组的定义形式为: 

类型名 *数组名[数组长度]

例如:int *p[4];

指针数组中的数组名也是一个指针变量,该指针变量为指向指针的指针。例如:

int *p[4];
int a=1;
*p[0]=&a;

p是一个指针数组,它的每个元素都是指针型数组(值为地址),指针数组p的第一个值是变量a的地址。指针数组中的元素可以使用指向指针的指针来引用。例如:

int *(*p);

 第一次进行*运算获取的是一个地址值,在进行一次指针*运算才可以获取具体值。

 

用指针数组中的各个元素分别指向若干个字符串 

运行结果如下所示。 

   在print函数中,数组名name代表该指针数组首元素的地址,name+i是name[i]的地址。设置一个制指针变量p,指向指针数组中的元素。 利用指针变量访问另一个变量就是间接访问。如果在一个指针变量中存放一个目标变量的地址,就是单级间址。指向指针的指针使用的是二级间距。

 

 五、结言

    感谢各位读者的阅读与参与,您的支持是我前进的动力!博主Ordinary会一直陪你复习C++语法,谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全 会飞的狗狗 网络安全狗是什么

1.概述 网站安全狗是一款集网站内容安全防护、网站资源保护及网站流量保护功能为一体的服务器工具。功能涵盖了网马/木马扫描、防SQL注入、防盗链、防CC攻击、网站流量实时监控、网站CPU监控、下载线程保护、IP黑白名单管理、网页防篡改功能等模块。能够为用户提供实时的网站安…

做简单易用的GIS资源管理软件

在室外资源管理领域,采用基于GIS的解决方案已成为主流趋势,旨在实现资源的高效利用和管理。GIS技术结合资源对象的规划、定位和监控,为企业提供全面的管理方案,从而优化资源使用、提高运营效率和降低成本。 然而,许多资…

ROS 手眼标定 realsense435i+ur5e

手眼标定的原理 基坐标系(base_tree)和相机(camera_tree)两个坐标系属于不同的tree,通过将标签贴到手上,相机识别出标签的position和orention,并通过easy_handeye标定包得到tool0(机械手)&…

Java—字节码文件解读

原文 public class ClassIntrucation {public static void main(String[] args) {int i 10;int j i;j;j;} } 查看字节码文件命令 javap -c 字节码文件例如: javap -c ClassIntrucation 结果 public class ClassIntrucation {public ClassIntrucation();Code:…

用c++实现快速排序、最大子段和问题

6.2.2 快速排序 【问题】快速排序(quick sort)的分治策略如下(图6-5)。 (1)划分:(选定一个记录作为轴值,以轴值为基准将整个序列划分为两个子序列,轴值的位置在划分的过程中确定,并且左侧子序列的所有记录…

Linux连接文件那点事

什么是连接文件 将一个文件和另一个文件建立联系,分为硬链接和软连接(符号连接)。 硬链接 Linux中,所有的文件都有一个inode,这个东西就是文件的ID号,硬链接的方式就是通过这个inode来产生新的文件名来建…

公共命名空间和RHP

概述 RHP的全称是:the little Robot that Helped me Program,帮我编程序的小机器人。 RHP必然存在,C语言的宏、C的模板,都是RHP;更复杂的例子,是lex和yacc,它们是制作程序的程序,也…

ChatGPT官网5月14日凌晨1点发布会推出最新GPT4o大模型,贾维斯时刻要来了?

就在今天北京时间2024年5月14日凌晨1点中,OpenAI进行了发布会,这次发布会的内容炸裂,一起来看下吧! GPT4o多模态大模型发布 首先公开的是GPT4o多模态大模型的发布,相较于GPT-4turbo速度更快,更便宜。我刚开…

Redis数据结构-RedisObject

1.7 Redis数据结构-RedisObject Redis中的任意数据类型的键和值都会被封装为一个RedisObject,也叫做Redis对象,源码如下: 1、什么是redisObject: 从Redis的使用者的角度来看,⼀个Redis节点包含多个database&#xff…

【Linux】常用指令、热键与权限管理

一、常用指令 (1)ls 功能:列出指定目录下的所有子目录与文件 用法:ls (选项) (目录或文件名) 常用选项: -a:列出目录下的所有文件,包括隐藏…

ubuntu在conda环境中使用 pip install -r requirements.txt但是没有安装在虚拟环境中

whereis pip pip listubuntu在conda环境中使用pip install lpips0.1.3 但是安装在了这里 Requirement already satisfied: lpips0.1.3 in /home/uriky/anaconda3/lib/python3.11/site-packages (0.1.3) 就会出现黄色波浪,未在虚拟环境中安装包 解决办法1&#xff1…

css笔记总结2

找到所有的 h1 标签。 选择器(选对人) 设置这些标签的样式,比如颜色为红色(做对事)。 ##css基础选择器 基础选择器又包括:标签选择器、类选择器、id 选择器和通配符选择器 ###标签选择器: 标签…