问题标签 [pass-by-pointer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - 为什么这些代码块的行为不同?
我是 Perl 的新手,我无法弄清楚这一点。我有两组看似相同的代码,但一个子例程会更新值,而另一个则不会。在第一组代码中,我的理解是传递对数组的引用,然后更新该引用所指向的值。然后在离开子程序的时候,值已经改变了。但是,在第二个中,我希望会发生同样的事情。它确实更新了数组,但是在离开子例程后它忘记了它。有人可以用第二组代码向我解释幕后发生了什么吗?
第一个代码集:
第二个代码集:
c++ - 使用传递引用而不是传递指针时的二进制兼容性
这个问题旨在作为这个问题的后续问题:C++ 中的指针变量和引用变量有什么区别?
阅读了我在 stackoverflow 上找到的答案和一些进一步的讨论后,我知道编译器应该像对待传递指针一样对待传递引用,并且引用只不过是语法糖。考虑到二进制兼容性,我还无法弄清楚一件事是否有任何区别。
在我们的(多平台)框架中,我们要求在发布和调试版本之间(以及框架的不同版本之间)二进制兼容。特别是,我们在调试模式下构建的二进制文件必须可用于发布版本,反之亦然。为此,我们只在接口中使用纯抽象类和 POD。
考虑以下代码:
ISerializer
也是IException
纯抽象类。ISerializer
必须指向一个现有的对象,所以我们总是必须执行一个 NULL 指针检查。IException
实现某种异常处理,其中指针指向的地址必须更改。出于这个原因,我们使用指向指针的指针,它也必须进行 NULL 指针检查。
为了使代码更加清晰并摆脱一些不必要的运行时检查,我们希望使用 pass-by-reference 重写此代码。
这似乎没有任何缺陷。但是这是否仍然满足二进制兼容性的要求仍然是我们的问题。
更新: 澄清一下:这个问题与代码的指针传递版本和引用传递版本之间的二进制兼容性无关。我知道这不能是二进制兼容的。事实上,我们有机会重新设计我们的 API,我们考虑使用传递引用而不是传递指针而不关心二进制兼容性(新的主要版本)。当仅使用代码的传递引用版本时,问题只是关于二进制兼容性。
c++ - 将对象传递给函数时,我必须重载哪些运算符才能查看所有操作?
我想编写一段代码,显示在将对象传递给函数时对其进行的所有复制/分配/删除等操作。
我写了这个:
我忘了什么吗?在比较传递对象的不同方式时,还有什么需要考虑的吗?
c++ - 传递指向在 C++ 中动态定义的内置类型的指针
我想调用一个库的函数(我不能修改)
有没有办法即时调用定义 theint
和 the的函数?char
即做类似的事情
代替
这将极大地减少我的代码长度,同时提高可读性。
c - 整数/结构数组的结尾?
基本上 main() 将如何知道要遍历的字节数,即 alloco() 函数分配的内存。字符数组中是否有像 NULL 这样的分隔符?
c++ - C++ 引用调用
如果我有一个函数需要一个指向整数的指针,并且我从我的 main 传递一个对整数变量的引用,那么这个调用是按值调用还是按引用调用?示例代码:
在上面的代码中,函数fun的调用是值调用还是引用调用?
c++ - 将向量的向量传递给函数
我有一个接受的函数
并修改 MyClass 实例。自从我编写任何 C++ 以来已经有很长时间了,我很难记住在这里通过引用而不是通过值传递整个 arg 的内容是什么。
我原来的方法签名是:
我想让这个内存高效,所以我最初将其更改为:
然后我意识到这意味着我的 vec 值仍然会复制所有内部向量。所以我将我的函数签名更改为:
这是否足够,或者我还需要做类似的事情:
有人可以强调所有这些之间的记忆差异吗?非常感谢!
c++ - 可以在没有指针的情况下实现传递引用吗?
这可能是关于计算机体系结构的问题,而不是 C++ 本身的问题,但我想知道在理论上是否可以在不使用 C++ 之类的语言中的指针的情况下实现传递引用。
以下是三个具有相似功能和结构的代码示例。
我的猜测是第一个版本中的增量函数直接访问全局变量,没有任何指针。第二个版本在函数的堆栈帧中分配一个指向局部变量的指针并间接访问它。从快速搜索来看,第三版显然与第二版完全一样(在优化之前)。资料来源:参考是如何在内部实现的?
但是理论上(甚至在实践中,经过一些编译器的优化),第三个函数可以直接访问它自己的堆栈框架之外的局部变量而不需要指针吗?或者这种行为是全局变量独有的,因为它们在内存中的位置是静态的?
我问这个是因为我认为创建和取消引用指针应该占用少量的时间和内存。在诸如传递十几个引用的深度递归函数之类的东西中,时间和内存可能会加起来。
PS我还应该特别提到内联函数,因为它们甚至不会生成新的堆栈帧。即如果函数是inline int increment(int*)
and inline int increment(int&)
,版本 2 和 3 的汇编代码会有所不同,还是编译器会在这种情况下优化掉指针?
c - 为什么这个按指针传递没有按预期工作?
我试图理解为什么以下代码不起作用......请帮助:
输出是:
我期待: ff99a348,1 ff99a348,2 ff99a348,2
它打破了我对指针的了解......
谢谢。
编辑:
我要问的主要问题是 incme((double *)&i); 为什么不将其转换为加倍并将其传递给函数?...抱歉没有指出eailer ....
c++ - 为什么我应该更喜欢智能指针的引用而不是智能指针作为 C++ 中的参数
我目前正在编写一些代码(c++11),它大量使用指针上的引用,例如
我对此进行了一些性能测试(使用Visual Studio 2013 VC12),似乎没有时间上的差异。交出一个 Null-Ptr 也是可以的。
那么在这种情况下使用引用的可能原因是什么?