【C++ 函数参数】指针类型和指针引用类型的区别

目录

  • 0 引言
  • 1 参数是指针类型
  • 2 参数是指针的引用
  • 3 总结

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:C++专栏
  • 💥 标题:【C++ 函数参数】指针类型和指针引用类型的区别
  • ❣️ 寄语:人生的意义或许可以发挥自己全部的潜力,所以加油吧!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正

0 引言

在学习过程中发现对指针类型还有指针引用类型还是不熟练,今天再回顾总结一下。

1 参数是指针类型

看下面这段代码,函数参数是指针,在我们以前的记忆中指针传递就是可以改变实参的值。但是这个“值”改变的是指针本身的地址呢?还是指针指向的数据呢?

void fun(int* p)
{
    cout << "3: p address = " << &p << endl;
    cout << "4: p value = " << *p << endl;
}

int main() {
    int* a = new int(2);
    cout << "1: a address = " << &a << endl;
    cout << "2: a value = " << *a << endl;

    fun(a);
    return 0;
}

输出结果如下:可以发现实参a的地址和形参p的地址是不同的,也就是说这是两个指针,但是他们俩的值是相同的,那么我在函数中修改指针p所指向的值,会影响实参a所指向的值吗? 会改变

1: a address = 000000A5DEBAFA48
2: a value = 2
3: p address = 000000A5DEBAFA20
4: p value = 2

看下面这段代码的运行结果

在这里插入图片描述

在 C++ 中,当你将指针作为参数传递给函数时,指针本身的地址是被拷贝传递的。这意味着在传递指针时,传递的是指针所指向内存地址的副本,而不是整个内存块的拷贝。

所以,在这种情况下,并不会发生整个内存块的拷贝,而只是将指针本身的值(即指向的内存地址)复制给函数参数。因此,传递指针参数时,只会有4个字节的拷贝(对于32位系统)。

但是,这并不意味着函数参数的指针本身和实参的指针地址是相同的。实参的指针地址是指向内存中某个特定位置的地址,而函数参数的指针是实参指针的副本,它在内存中的位置是独立的,虽然它们都指向相同的内存地址。因此,虽然指针所指向的值是相同的,但指针本身在内存中的地址是不同的。


值得注意的是,我们刚才打印的都是指针本身的地址,而不是指针指向的地址。 如下所示

  1. cout << "1: a point address = " << a << endl; 输出的是指针本身的地址
  2. cout << "2: a address = " << &a << endl; 输出的是指针指向的地址

在这里插入图片描述


也就是说使用指针传递,如果改变函数参数指针本身的地址,是不会影响实参指针本身的地址的。同时连实参指向的值也改变不了。

代码如下:可以发现函数中的指针p重新指向了一个新地址后,并没有影响a的指向和a本身的地址。
在这里插入图片描述

2 参数是指针的引用

如果参数是指针的引用类型呢?其实就是给指针取了一个别名

代码如下:使用指针的引用传递,不仅指针指向的地址是相同的,而且指针本身的地址也是相同的。
在这里插入图片描述

如果此时在函数中修改了p指向的地址,也会影响a指向的地址,代码如下:
在这里插入图片描述

如果不使用指针引用传递的话,就不会修改a指向的地址,代码如下:
在这里插入图片描述

3 总结

总体来说指针的引用类型传递参数没太大用处。函数中通过 *p 修改指向的地址的值就可以。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对外开放接口的Appkey和Secret应该如何设置?

文章目录 appkey和Secret 分别是什么&#xff1f;App keyapp secret Appkey和Secret 因遵循什么原则&#xff1f;代码示例随机生成有效的appkey校验Appkey调用效果 小结 appkey和Secret 分别是什么&#xff1f; App key App key简称API接口验证序号&#xff0c;是用于验证API…

C++ - 类和对象(上)

目录 一、类的定义 二、访问限定符 public&#xff08;公有&#xff09; protected&#xff08;保护&#xff09; private&#xff08;私有&#xff09; 三、类声明和定义分离 四、外部变量和成员变量的区别与注意 五、类的实例化 六、类对象的模型 七、类的this指针…

linux系统编程 socket part2

报式套接字 1.动态报式套接字2.报式套接字的广播3.报式套接字的多播4.UDP协议分析4.1.丢包原因4.2.停等式流量控制 接linux系统编程 socket part1 1.动态报式套接字 在之前的例子上&#xff0c;发送的结构体中的名字由定长改变长。可以用变长结构体。 变长结构体是由gcc扩展的…

主流电商平台淘宝/1688/京东电商数据实时采集监测|电商API接口接入

电商大数据平台基于网络主流电商平台淘宝/1688/京东电商数据进行搭建&#xff0c;全面监测了包含淘宝、京东、苏宁、美团、大众点评等共计100余个主流电商交易平台&#xff0c;并凭借多年的电子商务数据分析挖掘经验积累形成的电商数据清洗体系和挖掘模型&#xff0c;能高效完成…

ARIMA

一.数据平稳性与差分法 1.平稳性&#xff1a; 2.差分法&#xff1a; 错开时间点&#xff0c;使得数据可以平稳 原数据➡️一阶差分➡️二阶差分&#xff1a; 二、arima 1.自回归模型 2.移动平均模型 关注的是误差项的累积 3.arma p d(几阶差分&#xff09; q自己指定 4.总…

分手我见得多了,怎么软件也玩分手?

网管小贾 / sysadm.cc 今年年初&#xff0c;我们就注意到了一件忒奇怪的事儿。 我们公司的同事小孙&#xff0c;以前人长得高高瘦瘦&#xff0c;做人做事也是谨小慎微、内敛腼腆&#xff0c;怎么突然间变得容光焕发、大大咧咧&#xff0c;脸上肚子上也多了几斤肉&#xff0c;整…

基于ssm的酒店民宿管理系统的设计与实现

系统主要功能介绍&#xff1a; 1、登录&#xff1a;输入账号密码进行登录&#xff0c;登录后才能进行相应的操作 2、客房管理&#xff1a;客房管理主要是酒店预订&#xff0c;可以选择不同的房间&#xff0c;比如大床房&#xff0c;家庭房等&#xff0c;入住办理&#xff0c;…

【力扣刷题日记】1076.项目员工II

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1076.项目员工II 表&#xff1a;Project 列名类型project_idintemployee_idint (project_id, employee_id)…

AIGC实战——Transformer模型

AIGC实战——Transformer模型 0. 前言1. T52. GPT-3 和 GPT-43. ChatGPT小结系列链接 0. 前言 我们在 GPT (Generative Pre-trained Transformer) 一节所构建的 GPT 模型是一个解码器 Transformer&#xff0c;它逐字符地生成文本字符串&#xff0c;并使用因果掩码只关注输入字…

代码随想录算法训练营第五十天|123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 刷题https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/description/文章讲解https://programmercarl.com/0123.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BAIII.html视频讲解https://www…

Arduino中的map函数

一、案例 val analogRead(dyPin); //读取模拟口的模拟量数值 dyValuemap(val,0,1023,0,500);//这个函数是将电位器调节的模拟量的值按比例转换成对应的电压量 问题&#xff0c;为什么不是0~499呢&#xff1f; 其实也行↓ 当map(val, 0, 1023, 0, 500)被调用时&#xff0…

YiYi-Web项目介绍

YiYi-Web项目介绍 1. 简介2. 使用2.1 后端开发环境2.2 前端开发环境 3. 测试环境&#xff1a;4. 更新日志5. 打包情况6.项目截图 本项目前端是html、css、js、jQuery基础技术。 后端都是最新的SpringBoot技术&#xff0c;不分离版本&#xff0c; 是最基础的项目开发教程&#x…

yolov5训练并生成rknn模型部署在RK3588开发板上,实现NPU加速推理

简介 RK3588是瑞芯微&#xff08;Rockchip&#xff09;公司推出的一款高性能、低功耗的集成电路芯片。它采用了先进的28纳米工艺技术&#xff0c;并配备了八核心的ARM Cortex-A76和Cortex-A55处理器&#xff0c;以及ARM Mali-G76 GPU。该芯片支持多种接口和功能&#xff0c;适…

atoi函数详解

atoi函数使用方法 在c官网中是这样介绍atoi函数的 通俗的讲就是把字符串中的字符数字转换为整形数字&#xff0c;遇到空格就跳过&#xff0c;如果在字符串开始遇到不是有效的整数比如说abc就直接返回0&#xff0c;如果遇到像这种情况123abc345这个就只返回123&#xff0c;这个…

申请Github Education获取免费Copilot权限(2024.3.18实测成功)

起因&#xff1a;旧帐户Copilot权限被封 我已经离开Github Copilot就无法独自耐着性子写代码了&#xff08;懒惰AI成瘾性&#xff09;&#xff0c;这两天Github Copilot不知道为什么在大规模封号&#xff0c;我不幸也被封号了&#xff08;禁用掉了Github Copilot权限&#xff…

大数据技术原理与应用 01.大数据概述

不可以垂头丧气&#xff0c;会显矮 —— 24.3.24 参考学习&#xff1a;厦门大学 林子雨老师 大数据技术原理与应用 一、大数据时代 大数据概念、影响、应用、关键技术 大数据与云计算、物联网的关系 ①三次信息化浪潮时代 ②第三次信息化浪潮的技术支撑 1>存储设备容量不断…

微服务(基础篇-003-Nacos)

目录 Nacos注册中心&#xff08;1&#xff09; 认识和安装Nacos&#xff08;1.1&#xff09; Nacos快速入门&#xff08;1.2&#xff09; 服务注册到Nacos(1.2.1) Nacos服务分级存储模型&#xff08;1.3&#xff09; 配置集群&#xff08;1.3.1&#xff09; 根据集群修改…

[ Linux ] git工具的基本使用(仓库的构建,提交)

1.安装git yum install -y git 2.打开Gitee&#xff0c;创建你的远程仓库&#xff0c;根据提示初始化本地仓库&#xff08;这里以我的仓库为例&#xff09; 新建好仓库之后跟着网页的提示初始化便可以了 3.add、commit、push三板斧 git add . //add仓库新增&#xff08;变…

阿里云倚天云服务器怎么样?如何收费?

阿里云倚天云服务器CPU采用倚天710处理器&#xff0c;租用倚天服务器c8y、g8y和r8y可以享受优惠价格&#xff0c;阿里云服务器网aliyunfuwuqi.com整理倚天云服务器详细介绍、倚天710处理器性能测评、CIPU架构优势、倚天服务器使用场景及生态支持&#xff1a; 阿里云倚天云服务…

AI预测福彩3D第17弹【2024年3月24日预测--第1套算法重新开始计算第14次测试】

今天周末&#xff0c;家里事情比较多&#xff0c;回来的比较晚&#xff0c;3D预测的结果只能在今天晚上7点半左右发布了。废话不多说了&#xff0c;直接上结果吧~ 最终&#xff0c;经过研判分析&#xff0c;2024年3月24日福彩3D的七码预测结果如下&#xff1a; 百位&#xff1a…