C++ 参数传递查询(包括代码示例和输出)

2023-12-31

我再次来到这里是因为 C++ 的课程材料根本没有教得很好。该问题给出了使用几个函数定义和对这些函数的调用,并期望我们说明输出以及到底发生了什么。我已经执行了这些功能,并试图对正在发生的事情提出一些理由,但如果有人可以帮助我,我将非常感激。

函数定义(名称都是给定的。我知道这些名称不太好):

void MyIncrementFirst(int * i) {
(*i)++;
}

void MyIncrementSecond(int i) {
i++;
}

void MyIncrementThird(int & i) {
i++;
}
void MyIncrementFourth(int ** i) {
*i = new int(0);
}

void MyIncrementFifth(int *& i) {
i = new int(69);
}

对这些函数的调用定义为:

int * a = new int(42);
cout << "Result" << endl;

MyIncrementFirst(a);
cout << "first " << *a << endl;

MyIncrementSecond(*a);
cout << "second " <<*a << endl;

MyIncrementThird(*a);
cout << "third " <<*a << endl;

MyIncrementFourth(&a);
cout << "fourth " <<*a << endl;

MyIncrementFifth(a);
cout << "fifth " <<*a << endl;

产生以下结果:

first 43
second 43
third 44
fourth 0
fifth 69 

其中一些语法我以前没有见过(例如*&)所以我在这里可能完全错了。

First:

这看起来很简单。我传入一个指向整数的指针,然后取消引用该指针并递增其值,因此我不是递增指针,而是递增它指向的实际值。不使用内存分配,并且该函数使用引用传递来修改值。

Second:

这与上面类似,因为指针被取消引用以从指针而不是内存地址获取整数值。现在该函数使用值传递,因此在函数执行中使用变量的副本。这意味着在这里增加 a 不会对您传入的变量产生任何影响,a 的值将保持为 42,但传入变量的副本在函数执行期间将其值更改为 43。

Third:

我的理解是'&'运算符基本上是说“...的内存地址”,因此该函数将获取传入指针的内存地址,找到它指向的值,并将 this 加一。这就是打印 43 的原因。这是使用引用传递。

Fourth:

如果我没记错的话'**' 语法表示指向指针的指针。这意味着当将 &a 传递给函数时,您正在传递指针的内存地址,因此当您取消引用该指针并将其值设置为 anew int(0);实际上,您正在覆盖该地址处的现有数据(本例中为 42),因此会打印值 0。这使用了引用传递。

fifth:

我以前没见过这个语法(*&)。我查了一下这个语法,我认为它基本上是在说“通过引用而不是值传递给我”,所以它似乎与前面提到的取消引用指针相同。同样,因为当值设置为 a 时,这是按引用传递而不是值new int(69);该位置的当前数据被覆盖,因此输出 69。

编辑:忘记包含我的问题!我想知道我的想法是否正确,这都是考试准备,所以我想确保我做得正确。我只是想确保我的逻辑是正确的,如果我做错了什么或错过了什么,有人会能够引导我走向正确的方向


Edit:(根据一些评论者的反馈)

您所拥有的一切基本上都是正确的,从而避免了输出值上的一些混乱。然而,#4 和 #5 中的数据实际上并不是被覆盖的数据,它实际上是新地址上的新数据,该数据被分配给变量i。这是早期评论者所说的关于内存泄漏的可能性的一部分。由于您在分配新地址之前没有删除旧地址,因此可能会发生这种情况。

The &*最后一个语法是对指针的引用。它本质上是一样的int**除非你没有通过&a作为论证,这只是a

你对数字 5 的理解基本上是正确的,但其背后的推理缺少以下含义:&*

您可能想澄清您是按顺序运行这些函数调用中的每一个还是一次运行一个,因为如果您确实按照编写的顺序运行它们,那么您的输出是不正确的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 参数传递查询(包括代码示例和输出) 的相关文章

  • 编写此代码片段的有效方法是什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 更有效和 或更短地重写此代码以节省字节并显得不那么冗长的方法 if N 2 0 N 6 N 8 N 10 N 12 N 14 N 16 N
  • WebClient.DownloadDataAsync 冻结了我的 UI

    我在 Form 构造函数中的 InitializeComponent 之后有以下代码 using WebClient client new WebClient client DownloadDataCompleted new Downloa
  • MFC CList 支持复制分配吗?

    我在 MSVC 中查找了 CList 定义afxtempl h http www cppdoc com example mfc classdoc MFC AFXTEMPL H html并记录在MSDN http msdn microsoft
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • 司机和提供商之间的区别

    数据库中的驱动程序和提供程序有什么区别 有没有解释一下 不胜感激 样本 ADO NET driver for MySQL vs providerName System Data EntityClient 来自 MSDN 论坛 驱动程序是安装
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • C++ 将联合强制转换为其成员类型之一

    以下对我来说似乎完全符合逻辑 但不是有效的 C 联合不能隐式转换为其成员类型之一 有人知道为什么不这样做的充分理由吗 union u int i char c function f int i int main u v v i 6 f v
  • while循环中的变量初始化

    我有一个可以分块读取文件的函数 public static DataObject ReadNextFile 数据对象看起来像这样 public DataObject public string Category get set And ot
  • 有什么方法可以重载 C# 中的扩展方法吗?

    我有以下模型模式 public abstract class PARENTCLASS public class CHILD A CLASS PARENTCLASS public static class EXTENSION public s
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • doxygen c++:记录由“using”声明公开的私有继承成员

    作为一个例子 我有以下课程 class A public void methodOne class B private A public Brief description using A methodOne 我还没有找到强制 doxyge
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • C 语言中的 Alpha 混合 2 RGBA 颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速进行阿尔法混合 https stackoverflow com questions 1102692 how to do alpha blend fast 对 2 个 RGBA 整数 颜色进行
  • Xamarin.Forms UWP 项目中标题栏和选项卡之间令人恼火的空白

    我几乎是新手Xamarin Forms我正在开发一个相当简单的跨平台应用程序 该应用程序在 Android 中显示得足够好 但在 UWP 中却出现了一个愚蠢的空白 该项目由一个 TabbedPage 组成 其中包含 4 个 Navigati
  • 这种尺寸对齐是如何工作的

    对于所提供的评论 我无法理解以下代码 这段代码的作用是什么 以及等效的代码是什么8 aligned segment size must be 4 aligned attr gt options ssize 3 Here ssize is o
  • 将 char 绑定到枚举类型

    我有一段与此非常相似的代码 class someclass public enum Section START MID END vector section Full void ex for int i 0 i section
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • 如何提高环复杂度?

    对于具有大量决策语句 包括 if while for 语句 的方法 循环复杂度会很高 那么我们该如何改进呢 我正在处理一个大项目 我应该减少 CC gt 10 的方法的 CC 并且有很多方法都存在这个问题 下面我将列出一些例如我遇到的问题的

随机推荐

  • 找不到盒子“laravel/homestead”

    我已经下载了laravel homestead手动装箱here https atlas hashicorp com laravel boxes homestead 我成功添加了盒子 vagrant box add file path to
  • 在 Bash 中,有没有办法在双引号中将变量展开两次?

    为了调试我的脚本 我想在每个输出的开头添加内部变量 FUNCNAME 和 LINENO 这样我就知道输出发生在哪个函数和行号上 foo local bar something echo FUNCNAME LINENO I just set
  • Pyinstaller 设置图标不改变

    当我使用命令时 pyinstaller exe icon test ico F noconsole test py 所有图标均不会更改为 test ico 一些图标保留为 pyinstaller 的默认图标 Why 所有图标均更改为 视窗
  • 使用字母间距填充div

    我遇到的问题是填写div与文本使用letter spacing 主要问题是我不知道宽度div 首先我想使用 text align justify 但从那以后我一直在黑暗中奔跑 不知道如何解决这个问题 我猜想一些脚本魔法可能会解决这个问题 一
  • 冲突的类型和先前的 x 声明在这里......什么?

    当我有时间的时候 我已经自学了几个月的 C 语言 但我遇到了一个我不知道如何解决的问题 具体来说 当我尝试使用 gcc 编译它时 我得到 geometry c 8 error conflicting types for trapezoid
  • 来自带有时区和夏令时的字符串的 Qt QDateTime

    我正在从字符串插入时间 QDateTime time QDateTime fromString Wed Mar 26 22 37 40 2019 GMT 08 qDebug lt
  • 从通知区域发出的卡通语音气泡叫什么?如何创建一个?

    谁能告诉我以下弹出窗口的名称是什么 如何为我的应用程序创建这样的弹出窗口 To be more specific this is indeed called a Notification http msdn microsoft com en
  • Clojure中如何加载程序资源

    如何在 Clojure 程序中加载图标 字符串 图形元素 脚本等程序资源 我使用的项目布局类似于许多 Java 项目中的布局 其中有一个 资源 目录挂在 源 目录下 jar 文件是从源代码创建的并包含资源 但我似乎无法像在 Java 中那样
  • 将 JWK json 转换为公钥 golang (lestrrat-go)

    我使用 JWKS 格式从身份验证服务提供公钥 该公钥可用于验证来自该身份验证服务的令牌 但是 要执行验证 我需要从 JWK 重建公钥 我该如何转换它 type JWKeys struct Keys JWKey json keys type
  • 多选到数组

  • 使用 SharePoint 客户端对象模型检查列表列是否存在?

    使用 SharePoint 2010 中的客户端对象模型 C 如何确定给定列表中是否存在指定的列 字段 名称 谢谢 魔术安迪 刚刚在搜索相同的东西时发现了这个 但看起来 Sharepoint 2010 有内置的东西 至少对于服务器模型 li
  • 图像未通过 android webview 加载

    我有一个加载网页的网络视图 有时该网页中有图片 但是 我遇到了 2 个图像无法加载的情况 并且每个情况都给出了不同的结果 结果 1 网页已加载 但图像未加载 使用的格式 jpeg 结果 2 网页已加载 但图像未加载 然而 在该图像所在的位置
  • 转义保留字

    Sitecore 提供了一种转义 Sitecore 查询中包含不喜欢字符的单词的方法 此类字符包括连字符和空格 为了简化我的生活 我编写了一个简单的辅助函数 可以转义 Sitecore 查询的每个部分 并且它运行良好一段时间 public
  • Spring Security仅用于授权。外部认证

    正如标题所述 我正在开发一个 Web 应用程序 该应用程序从外部应用程序接收用户身份验证信息 我的应用程序的弹簧控制器获取用户信息并将其存储在会话中 我想在 Spring Security 中对这个用户进行身份验证 然后使用他的角色授予 拒
  • 获取作为输入文本字段的数据表单元格值

    我正在使用 javascript 数据源生成 DataTable 这data从对 nodejs 的 ajax 调用返回 该调用查询 SQL Server DB 表并返回 2 列 均为数值数据 我再添加 2 列来保存输入字段 默认值为 0 以
  • IP 本地化:映射 ip->location 随着时间的推移而固定?

    我正在管理一个网络平台 想要获取一些统计数据 了解我的用户来自哪里 我可以存储远程 IP 并且我知道有本地化服务可以将 IP 映射到地理位置 这个映射是如何完成的 是否有固定的表 哪个IP地址分配给哪个地区 我必须在访问时请求映射还是可以在
  • 如何禁用或忽略 Dependabot 拉取请求?

    我们希望使用 Dependabot 来了解更新的依赖项 但我们不希望 Dependabot 自行创建拉取请求 也不希望自动构建 我们使用 GitHub 进行代码 使用 Azure DevOps 进行构建 文档中没有明确的提示 https d
  • 生成密码重置密码

    我正在做一个允许用户重置密码的模块 我注意到大多数网站都提供了一个确认链接 其中包含具有唯一哈希值的查询字符串 我的问题是 每次同一用户请求忘记密码时 如何生成这个唯一的哈希值 我应该将此哈希存储在数据库中并稍后使用它进行验证吗 会安全吗
  • 在 SQL Server 中强制部分连接顺序

    Edit 人们很难理解我想要什么 这里有一些漂亮的图片 详细地解释了它 首次加入交易 to Strange 到目前为止的结果 Customer Invoice TransactionID Mass Length LeptonNumber I
  • C++ 参数传递查询(包括代码示例和输出)

    我再次来到这里是因为 C 的课程材料根本没有教得很好 该问题给出了使用几个函数定义和对这些函数的调用 并期望我们说明输出以及到底发生了什么 我已经执行了这些功能 并试图对正在发生的事情提出一些理由 但如果有人可以帮助我 我将非常感激 函数定