int*与int*&_int &value-程序员宅基地

技术标签: C++  c++  c语言  

很多CPPers都会对指针和引用的使用感到头疼,特别是在两者混用的时候。而指针和引用一个最大的用途就是作为函数形参。
以下为本人总结的一些int* 与 int*&在作为函数形参的使用中的区别

1.int* value

指针大家都不陌生,指针在作为函数形参时,最广泛的用途就是传入数组的首地址,进而在函数中对数组进行操作。

int Calc(int *value)
{
    
   //value则为数组value[]的首地址
   //可以直接使用value[]操作数组
}

所以,用int* value作为函数形参,传入函数的是value这个指针变量所指向的那个地址,也就是说在这种情况下,value一定不可以是空指针。
例如以下代码

void Calc(int *arr)
{
    
    cout << *arr << endl;
}
void main()
{
    
   int *value;
   Calc(value);
}

运行结果报错:
在这里插入图片描述

这个代码一定会报错,因为value指针没有指向任何地址,所以也就没有指向的地址可以传入了

那么,如果我只想先把value这个指针传进函数,在函数内部给value这个指针进行初始化,使它指向某一个地址。要怎么做呢。

我们可以借助引用,可以用到int* &

2.int *&value

先来回顾一下引用。
引用,简单来说就是给某个变量换个名字,例如int & num1 = num2,那么对num1操作就是对num2操作,反之亦然。
那么往深了说,为什么可以达到这样的效果呢,是因为num1与num2是存储在同一个地址的,所以无论对num1还是对num2操作,都是操作同一个地址上存储的变量。
所以我们或许可以利用引用的这个性质,将空指针直接传入函数。
例如:

void Calc(int *&arr)
{
    
    cout << *arr << endl;
}
void main()
{
    
   int *value;
   Calc(value);
}

这样代码就可以运行通过,虽然value指针没有指向任何地址,但是使用引用,可以将其只作为一个指针变量传入函数,进而进行接下来的操作。

3.综合总结

int *vlaue与int *&value作为函数形参时区别在于:
(1)int *value是将value指向的地址传进去,所以value指针不可为空指针,必须指向某一地址。
(2)int *&value则是将该指针变量传进去,相当于传入该指针的地址,所以该指针可以为空指针。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45512097/article/details/120095841

智能推荐

vue实现每隔几秒请求一次接口,实现数据更新_vue中每两秒调用一次接口-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏37次。项目中我们经常需要实现轮询-每隔几秒请求一次接口实现数据更新1:一般都会使用setInterval,但要注意单纯使用它会导致页面卡死方法1:new Vue({ el: '#app', data: {}, created: function() { var that = this; // setInterval不会清除定时器队列,每重复执行1次都会导致定时器叠加 \ window.setInterval(() =_vue中每两秒调用一次接口

高斯数据库错误参考代码GAUSS-51100——GAUSS-51236_[gauss-50236] : the 192.168.40.130 does not exist -程序员宅基地

文章浏览阅读7.5k次,点赞3次,收藏12次。GAUSS-51100:"Failed to verify SSH trust on these nodes: %s."SQLSTATE: 无错误原因:在各节点上核实SSH互信失败。解决办法:检查确保各节点互信必须创建。GAUSS-51101:"SSH exception: \n%s."SQLSTATE: 无错误原因:远程连接异常。解决办法:检查确保网络连接必须正常;检查确保远程机器的IP及登录用户和密码必须正确。GAUSS-51102:"Failed to exch_[gauss-50236] : the 192.168.40.130 does not exist or the permission on the u

彩色成像的基础和应用 原理 Principles(一)_彩色成像意义-程序员宅基地

文章浏览阅读149次。彩色成像的基础和应用 目录_彩色成像意义

DolphinScheduler on k8s 云原生部署实践_dolphinscheduler 云服务-程序员宅基地

文章浏览阅读1.2k次,点赞16次,收藏32次。1. DolphinScheduler 的高效云原生部署模式,比原始部署模式节省了95%以上的人力资源和工作时间,提升了部署效率和成本效益。2. 通过集成 GitOps 技术,我们提升了 DolphinScheduler 的 DevOps 管理能力,改善了软件交付效率和安全审计能力。3. 通过集成新的云原生技术,我们为 DolphinScheduler 增加了水平扩展、健康探测和滚动部署等功能,提升了其灵活性和适应性。4. 将 Prometheus 等可观测性技术整合到基础设施和服务网格中,显著提升了_dolphinscheduler 云服务

深度学习调参大法-学习率动态调整_图像识别中optim.adam(net.parameters(), lr=0.0002)里面的学习率-程序员宅基地

文章浏览阅读1.7k次,点赞4次,收藏11次。optim.StepLR,optim.MultiStepLR,optim.LambdaLR,optim.ExponentialLR,optim.CosineAnnealingLR,optim.ReduceLROnPlateau_图像识别中optim.adam(net.parameters(), lr=0.0002)里面的学习率如何设置能提高

CentOS7.5安装svn_centos7.5安装svn服务端-程序员宅基地

文章浏览阅读148次。CentOS7,svn_centos7.5安装svn服务端

随便推点

【报错集锦】yolov8报错ModuleNotFoundError: No module named ‘ultralytics‘_modulenotfounderror: no module named 'ultralytics-程序员宅基地

文章浏览阅读1.2w次,点赞12次,收藏21次。yolov8遇到报错_modulenotfounderror: no module named 'ultralytics

【LeetCode刷题笔记(8-3)】【Python】【接雨水】【双指针】【困难】-程序员宅基地

文章浏览阅读961次,点赞20次,收藏24次。LeetCode刷题笔记;算法题:接雨水;核心思想是利用双指针在O(1)空间复杂度下解决【接雨水】问题。【双指针】【python】【困难】

YOLO8实战:yolov8实现行人跟踪计数_yolov8人流量计算-程序员宅基地

文章浏览阅读3.3k次,点赞12次,收藏56次。行人跟踪统计是智能监控系统中的重要功能,可以广泛应用于人流控制、安全监控等领域。传统的行人跟踪算法往往受到光照、遮挡等因素的干扰,难以实现准确跟踪。随着深度学习技术的发展,目标检测模型逐渐成为行人跟踪的主流方案。本文介绍使用YOLOv8目标检测模型实现行人跟踪统计的方法。_yolov8人流量计算

Idea导入的项目不能运行_idea 跑不起来是什么原因-程序员宅基地

文章浏览阅读5w次,点赞69次,收藏277次。Idea导入的项目不能运行Idea导入的项目不能运行Idea导入的项目不能运行其实这个错误是因为没有设置output的路径,只要修改两个地方的设置就可以了:在Modules设置里勾选”Inherit project compile path”2. 设置Project中的”Project compiler output” 选择”Project的路径”+”\out”,比如说我的就是 如..._idea 跑不起来是什么原因

计算机网络——数据链路层_为什么链路层不采用csma/ca-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。计算机网络——数据链路层_为什么链路层不采用csma/ca

algorithm头文件下的常用函数_algorithm的那个取值-程序员宅基地

文章浏览阅读213次。//头文件#include<algorithm>max();min();abs();swap();//可以交换结构体reverse();//reverse(a,a+n)注意取值[);将数组进行反转可以操作结构体fill();//fill(a,a+n,num);sort();..._algorithm的那个取值

推荐文章

热门文章

相关标签