- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在我们使用引用传递的 C++ 中,我们引用了我们从参数传递给函数参数的地址,它本质上是一个指针,对吗?因此,虽然它们本质上是相同的东西,别名和所有,但指针不也需要内存空间吗?因此,无论我们在参数函数中拥有什么,都不应该让我们调用 B 指向传递的参数的内存位置让我们调用 A,这反过来又是我们值的内存位置(因为 A 传递了我们值的内存位置作为参数)?
在我们使用按值传递的 java 中,我们复制了我们传递的任何地址(例如对对象的引用)。
所以最后我并没有真正看到按值传递和按引用传递之间的区别。按值传递在内存中为原始传递的参数分配空间,同时指向值和按引用传递的拷贝将我们值的内存位置作为参数传递,我们的参数(在内存中分配空间的指针)函数用于指向值。
最佳答案
In C++ where we use pass by reference we reference the address of whatever it is that we passed from the argument to the parameter of the function which is essentially a pointer right?
没有。引用是现有变量的别名(即替代名称)。
但是在汇编级别,您的实现可能会将引用变量的地址放在地址寄存器(或类似的东西)中以供被调用函数使用(如果这是您的意思)。
但是为了简单起见,您可以将其视为一个自动取消引用的指针(这是我刚开始时所做的)。但是当你进入语言时,引用实际上与指针根本不同。
So while they are essentially the same thing, alias and all, doesnt a pointer require memory space as well?
C++ 级别的指针需要空间(因为它是可寻址的)。您可以获取指针的地址。从根本上说,引用不需要空间(因为你不能获取它的地址)。在实现级别,它可能有也可能没有物理内存位置,具体取决于编译器如何实现它。
So shouldnt whatever we have in a parameter function let us call B point to the memory location of whatever the argument was that was passed let us call A
如果您用代码示例解释了上述内容,那就太好了。但我想我明白了。假设函数没有内联,那么作为引用传递的任何参数都需要某种形式的链接回到原始对象(因为引用总是从根本上引用 Activity 对象)。那么它是怎么做到的。编译器实现细节(所以你不应该关心)。但可能是堆栈上的指针,或者可能只是地址寄存器中的地址。
which in turn is the memory location of our value( since A passed the memory location of our value as the argument)?
也许吧,也许吧。引用文献在语言级别没有物理位置。所以编译器可以玩很多不错的小把戏。
In java where we use pass by value we make a copy of the address of whatever it was we passed(the reference to the object for example).
在 Java 中,您按值传递引用。但是 Java 引用基本上只是内存位置的指针。因此,您正在按值传递指针。这是一种使用的技术。幸运的是,C++ 并不限制您使用单一技术。
您可以按值或引用传递参数。您甚至可以按值或引用传递指向对象的指针。因此,根据情况使用一些有趣的技术。
So in the end i'm not truely seeing the difference between pass by value and pass by reference.
也许那是因为您正在考虑 java 引用(按值传递)。
在 C++ 中。如果按值传递,则创建了一个作为参数传递的新对象(这意味着您制作了原始对象的拷贝,这可能会产生成本)。如果您通过引用传递,则您正在将别名传递给对象。因此,当您与对象交互时,您正在修改原始对象。
int inc(int val) // pass by value
{
return ++val; // increment the passed value and return as a result.
}
int incref(int& val) // pass by reference
{
return ++val; // increment the reference.
// Since the reference is an alias this increment affects the
// original object. The result is returned.
}
void code()
{
int x = 5;
int y = inc(x); // x =5 and y = 6
int a = 8;
int b = incref(a); // a = 9 and b = 9
}
Pass by value allocates space in memory for the original passed argument and the copy that both point to the value and pass by reference passes the memory location of our value as the argument which the parameter(the pointer which allocates space in the memory ) in our function uses to point to the value.
对不起,我弄丢了。
关于java - Pass by value vs Pass by reference(两者在内存空间分配上的区别),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18050223/
运行 Tomcat 失败并出现 java.lang.OutOfMemoryError - 与缺少 PermGen 空间相关的错误。 我最近将 Tomcat 更改为以自己的用户(而非 root)运行。
我们有一个表,其中包含数百万行,其中包含 PostGIS 几何图形。我们要执行的查询是:落在边界几何内的最新条目是什么?这个查询的问题是我们经常会有大量的项目匹配边界框(半径大约为 5 公里),然后
我有一个Elasticsearch设置,它将允许用户搜索通配符作为索引。 array:3 [ "index" => "users" "type" => "user" "body" => arra
我创建了一个表,其中每行包含两个按钮,并且两个按钮连接在一起,我想将两个按钮分开。我用过 不起作用,css 也是,这是他们的另一种方式。 我有另一个问题,因为我不想在表格边框内显示操作按钮,而是在靠近
我试图在 jQuery Mobile 中的两个按钮之间留出空白。现实中的布局是这样的: Button 1 Button 2 (Hidden w/ display: none)
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
您好,我对图表应用程序还很陌生。现在我为我的应用程序创建了条形图。当我运行 create bar chart as separate project 时,输出如下所示。 然后当我将条形图与我的应用程序
我在使用 H2 和 GeoDB(内存中,junit)时遇到问题。 另外,使用 Hibernate 5(每个包的最新版本,包括 hibernate-spatial)和 Spring 4。 通过 id 实
我想画一张澳大利亚的 map ,并将每个城市表示为一个点。 然后突出显示人口众多(> 1M)的城市 library(sp) library(maps) data(canada.cities) head
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 6年前关闭。 Improve this
如何保持.txt文件中存在的空格?在.txt文件中,它表示: text :text text1 :text1 text23 :text2 text345 :text3 如果我写这段
以下哪个键最大? 选项 1:16 个数字 [0,9] 选项 2:30 个元音 选项 3:字母表中的 16 个字母 选项 4:32 位 有人可以帮助我,告诉我哪一个是正确的答案以及我们如何计算它吗?我知
在 Unity 3d 中使用 Azure 空间 anchor 来实现在 iOS 和 Android 上部署的室内和室外增强现实体验是否有益? 最佳答案 是的,对于 Azure Spatial Anch
我有一个绝对定位的圆形图像。图像只需占据屏幕宽度的 17%,并且距离顶部 5 个像素。 问题是,当我调整图像大小以占据屏幕宽度的 17% 时,它会这样做,但同时容器会变长。图像本身不会拉伸(stret
我在 Ubuntu 14.04 上使用 Cassandra。从文档中,我可以看到运行命令: nodetool snapshot 创建我的 key 空间的快照。 命令的输出是: nodetool sn
Heroku引入了“私有(private)空间”,是否可以将现有应用迁移到私有(private)空间? https://blog.heroku.com/archives/2015/9/10/herok
是否允许在语义记录中使用非绑定(bind)空格 或其他 HTML 编码字符?我遇到的问题是 ; 字符被软件视为记录的结尾。 例如:假设我有一份婚姻记录,其中包含 2 个结婚者的姓氏、结婚年份以及结
我正在研究“智能 parking ”项目,偶然发现了包含我们真正需要的YouTube视频。我们已经实现了第一部分,即从视频源进行实时透视变换,下一步是将其定义为一组矩形 我基本上需要知道他是如何做到的
我有两个类:Engine 和 Trainset(多个单元),这两个类共享其 ID 空间,其中包含名称和系列 id=- . 这是我的Engine类(它是抽象的,因为有引擎的子类型(DieselEngin
如果有人能帮助我,那就太好了。 我正在尝试使用Java的Split命令,使用空格分割字符串,但问题是,字符串可能没有空格,这意味着它将只是一个简单的顺序(而不是“输入2”将是“退出”) Scanner
我是一名优秀的程序员,十分优秀!