标签: pass-by-reference

Java:通过引用传递int的最佳方法

我有一个解析函数,它解析来自字节缓冲区的编码长度,它将解析的长度作为int返回,并将索引作为整数arg作为缓冲区.我希望函数根据它的解析来更新索引,即希望通过引用传递该索引.在C我只是通过int *.在Java中最干净的方法是什么?我目前正在考虑传递索引arg.作为一个int[],但它有点难看.

java pass-by-reference

79
推荐指数
7
解决办法
8万
查看次数

R中的copy-on-modify语义到底是什么,以及规范源在哪里?

每隔一段时间我就会遇到R具有复制修改语义的概念,例如在Hadley的devtools wiki中.

大多数R对象具有复制修改语义,因此修改函数参数不会更改原始值

我可以将这个术语追溯到R-Help邮件列表.例如,Peter Dalgaard在20037月写道:

R是一种函数式语言,具有惰性求值和弱动态类型(变量可以随意更改类型:a < - 1; a < - "a"是允许的).从语义上讲,一切都是复制修改,尽管在实现中使用了一些优化技巧来避免最严重的低效率.

同样,Peter Dalgaard在20041月写道:

R具有复制修改语义(原则上,有时在实践中),因此一旦对象的一部分发生变化,您可能必须在新的位置查找包含它的任何内容,包括可能的对象本身.

更进一步,20002月, Ross Ihaka说:

我们付出了相当多的努力来实现这一目标.我会将语义描述为"复制修改(如有必要)".仅在修改对象时才进行复制.(如果需要)部分意味着如果我们可以证明修改不能改变任何非局部变量,那么我们就可以继续修改而不需要复制.

它不在手册中

无论我搜索多么努力,我都无法在R手册中找到"复制修改"的参考,无论是在R语言定义还是在R Internals中

我的问题有两个部分:

  1. 这在哪里正式记录?
  2. 复制修改如何工作?

例如,谈论"传递引用"是否合适,因为承诺传递给函数?

r pass-by-reference pass-by-value

71
推荐指数
2
解决办法
6008
查看次数

在Python中通过引用传递整数

如何在Python中通过引用传递整数?

我想修改我传递给函数的变量的值.我已经读过Python中的所有内容都是按值传递的,但必须有一个简单的技巧.例如,在Java中,你可以通过引用类型的Integer,Long等等.

  1. 如何通过引用将整数传递给函数?
  2. 什么是最佳做法?

python function pass-by-reference pass-by-value

70
推荐指数
8
解决办法
9万
查看次数

哪个更有效:返回值与通过引用传递?

我目前正在研究如何编写高效的C++代码,在函数调用方面,我想到了一个问题.比较这个伪代码功能:

not-void function-name () {
    do-something
    return value;
}
int main () {
    ...
    arg = function-name();
    ...
}
Run Code Online (Sandbox Code Playgroud)

使用其他相同的伪代码功能:

void function-name (not-void& arg) {
    do-something
    arg = value;
}
int main () {
    ...
    function-name(arg);
    ...
}
Run Code Online (Sandbox Code Playgroud)

哪个版本更有效,以及在什么方面(时间,内存等)?如果它取决于,那么第一个什么时候会更有效率,什么时候第二个会更高效?

编辑:对于上下文,此问题仅限于与硬件平台无关的差异,并且大多数情况下也是软件.是否有任何与机器无关的性能差异?

编辑:我不知道这是一个重复.另一个问题是将参考传递(上游代码)与传递值(下图)进行比较:

not-void function-name (not-void arg)
Run Code Online (Sandbox Code Playgroud)

这跟我的问题不一样.我的重点不在于将参数传递给函数的更好方法.我关注的是这是更好的方式来传递一个结果来自外部范围的变量.

c++ performance function return-value pass-by-reference

70
推荐指数
5
解决办法
2万
查看次数

你可以在R中传递参考吗?

你能用"R"通过参考吗?例如,在以下代码中:

setClass("MyClass",
    representation(
    name="character"
    ))


instance1 <-new("MyClass",name="Hello1")
instance2 <-new("MyClass",name="Hello2")

array = c(instance1,instance2)

instance1
array

instance1@name="World!"

instance1
array
Run Code Online (Sandbox Code Playgroud)

输出是

> instance1
An object of class “MyClass”
Slot "name":
[1] "World!"

> array
[[1]]
An object of class “MyClass”
Slot "name":
[1] "Hello1"


[[2]]
An object of class “MyClass”
Slot "name":
[1] "Hello2"
Run Code Online (Sandbox Code Playgroud)

但我希望如此

> instance1
An object of class “MyClass”
Slot "name":
[1] "World!"

> array
[[1]]
An object of class “MyClass”
Slot "name":
[1] "World!"


[[2]]
An object of class …
Run Code Online (Sandbox Code Playgroud)

oop r parameter-passing pass-by-reference

66
推荐指数
5
解决办法
5万
查看次数

指针是否被认为是在C中通过引用调用的方法?

在我大学的C编程课程中,教授及其后来的书在引用C中的指针时使用了术语调用或通过引用传递.

我的教授称之为"参考函数调用"的一个例子:

int sum(int *a, int *b);
Run Code Online (Sandbox Code Playgroud)

我的教授称之为"价值函数呼叫"的一个例子:

int sum(int a, int b);
Run Code Online (Sandbox Code Playgroud)

读过 C不支持通过引用调用.根据我的理解,指针通过值传递.

基本上,说指针是C通过引用传递的方式是不正确的吗?说你不能通过C中的引用传递但是可以使用指针替代它会更正确吗?


2015年11月11日更新

从我的问题起源的方式来看,我认为术语的争论已经产生,实际上我看到了两个具体的区别.

  • pass-by-reference(主要用于今天的术语):C++等语言中使用的特定术语
  • pass-by-reference(我的教授用来解释指针的范例):在C++之类的语言开发之前使用的一般术语,因此在术语被重写之前

在阅读了@Haris的更新答案之后,为什么这不是那么黑白,这是有道理的.

c pointers pass-by-reference

65
推荐指数
7
解决办法
6566
查看次数

在PHP(> = 5.0)中,通过引用更快地传递?

在PHP中,函数参数可以通过在函数声明中的参数前加一个&符号来引用,如下所示:

function foo(&$bar)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

现在,我知道这不是为了提高性能,而是为了允许函数更改通常超出其范围的变量.

相反,PHP似乎使用Copy On Write来避免复制对象(也可能是数组),直到它们被更改为止.因此,对于不更改其参数的函数,效果应与通过引用传递它们的效果相同.

但是,我想知道Copy On Write逻辑是否可能在传递引用时短路,以及是否会对性能产生任何影响.

ETA:可以肯定的是,我认为它并不快,而且我很清楚这不是引用的内容.所以我认为我自己的猜测非常好,我只是想找一个真正知道发生在幕后的人的回答.在PHP开发的五年中,我总是发现很难通过阅读源来获得PHP内部的高质量信息.

php performance pass-by-reference

64
推荐指数
4
解决办法
3万
查看次数

在C中通过引用传递数组?

如何在C中通过引用传递一组结构?

举个例子:

struct Coordinate {
   int X;
   int Y;
};
SomeMethod(Coordinate *Coordinates[]){
   //Do Something with the array
}
int main(){ 
   Coordinate Coordinates[10];
   SomeMethod(&Coordinates);
}
Run Code Online (Sandbox Code Playgroud)

c arrays pass-by-reference

64
推荐指数
6
解决办法
22万
查看次数

C++通过引用传递数组

这是允许通过引用传递数组?

 void foo(double& *bar) 
Run Code Online (Sandbox Code Playgroud)

似乎我的编译器说没有.为什么?通过引用传递数组的正确方法是什么?还是一个解决方法?我有一个数组参数,我的方法应该修改,然后我应该检索.或者,我可以使这个数组成为一个类成员,它工作正常,但它对我的代码的其他部分有很多缺点(我想避免).

感谢致敬.

c++ arrays pointers reference pass-by-reference

62
推荐指数
4
解决办法
13万
查看次数

在Python中传递值

当你将一个像list,array这样的集合传递给python中的另一个函数时,是否会复制它,或者它只是一个指针?

python pass-by-reference pass-by-value

61
推荐指数
4
解决办法
8万
查看次数