标签: pass-by-value

按值将数组传递给函数

以下是C Programming Just the FAQs一书的摘录.这不是错误的,因为Arrays永远不能通过引用传递吗?

VIII.6:如何通过值将数组传递给函数?

答案:通过在被调用函数中声明带有方括号([])的数组名称,数组可以按值传递给函数.调用函数时,只需将数组的地址(即数组的名称)传递给被调用的函数即可.例如,以下程序将数组传递 x[]byval_func()value 命名 的函数:

int[]参数告诉编译器该byval_func() 函数将采用一个参数 - 一个整数数组.byval_func()调用该 函数时,将数组的地址传递给 byval_func():

byval_func(x);
Run Code Online (Sandbox Code Playgroud)

由于数组是按值传递的,因此会生成数组的精确副本并将其放在堆栈中.然后被调用的函数接收该数组的副本并可以打印它.因为传递给的数组 byval_func()是原始数组的副本,所以修改byval_func()函数中的数组对原始数组没有影响.

c arrays pass-by-reference pass-by-value

36
推荐指数
2
解决办法
8万
查看次数

在C++中通过引用/值传递

我想澄清价值和参考之间的差异.

我画了一张照片

在此输入图像描述

所以,为了通过价值,

使用不同的引用创建相同对象的副本,并为本地变量分配新引用,以指向新副本

如何理解单词:"如果函数修改了该值,则修改也出现在调用函数的范围内,用于传递值和引用"

谢谢!

c++ pass-by-reference pass-by-value

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

结构是"价值传递"吗?

我最近试图为一个Vector2字段创建一个属性,只是意识到它不能按预期工作.

public Vector2 Position { get; set; }
Run Code Online (Sandbox Code Playgroud)

这阻止我改变其成员的价值(X&Y)

查看有关此内容的信息,我读到为Vector2struct 创建属性只返回原始对象的副本而不是引用.

作为Java开发人员,这让我很困惑.

C#中的对象何时按值传递,何时通过引用传递?
是否所有struct对象都按值传递?

c# struct pass-by-value

33
推荐指数
4
解决办法
2万
查看次数

通过值时的经验法则比通过const引用更快吗?

假设我有一个带有类型参数的函数T.它不会改变它,所以我可以选择通过const引用const T&或值传递它T:

void foo(T t){ ... }
void foo(const T& t){ ... }
Run Code Online (Sandbox Code Playgroud)

T在通过const引用变得比通过值便宜之前,是否应该有多大的经验法则?例如,假设我知道这一点sizeof(T) == 24.我应该使用const引用还是值?

我假设复制构造函数T是微不足道的.否则,问题的答案取决于复制构造函数的复杂性,当然.

我已经找了类似的问题,偶然发现了这个问题:

模板传递值或const引用或...?

但是,接受的答案( /sf/answers/341385621/)没有说明任何细节,它只是声明:

如果您希望T始终是数字类型或复制非常便宜的类型,那么您可以按值获取参数.

所以它并没有解决我的问题,而是改写它:一种类型必须要"复制非常便宜"?

c++ pass-by-reference pass-by-value c++11

32
推荐指数
3
解决办法
4529
查看次数

golang切片是否超值?

在Golang,我正在尝试为我的旅行推销员问题制作一个争夺切片功能.虽然这样做我注意到当我开始编辑切片时,我给每个传递它时的加扰功能是不同的.

经过一些调试后我发现它是由于我编辑了函数内部的切片.但由于Golang应该是一种"通过价值传递"的语言,这怎么可能呢?

https://play.golang.org/p/mMivoH0TuV

我提供了一个游乐场链接来展示我的意思.通过删除第27行,您获得的输出与输入不同,这应该没有区别,因为该函数在作为参数传入时应该创建自己的切片副本.
有人可以解释这种现象吗?

pass-by-value go slice

32
推荐指数
4
解决办法
2万
查看次数

Java通过引用传递

这2个代码有什么区别:

代码A:

Foo myFoo;
myFoo = createfoo();
Run Code Online (Sandbox Code Playgroud)

哪里

public Foo createFoo()
{
   Foo foo = new Foo();
   return foo;
}
Run Code Online (Sandbox Code Playgroud)

比.代码B:

Foo myFoo;
createFoo(myFoo);

public void createFoo(Foo foo)
{
   Foo f = new Foo();
   foo = f;
}
Run Code Online (Sandbox Code Playgroud)

这2个代码之间有什么区别吗?

java terminology parameter-passing pass-by-reference pass-by-value

30
推荐指数
2
解决办法
3万
查看次数

Python:何时是通过引用传递的变量和何时按值传递?

可能重复:
Python:如何通过引用传递变量?

我的代码:

locs = [ [1], [2] ]
for loc in locs:
    loc = []

print locs
# prints => [ [1], [2] ]
Run Code Online (Sandbox Code Playgroud)

为什么loc不参考元素locs

Python:除非明确复制,否则所有内容都将作为引用传递[这不是真的吗?]

请解释.. python如何决定引用和复制

更新:

怎么做 ?

def compute(ob):
   if isinstance(ob,list): return process_list(ob)
   if isinstance(ob,dict): return process_dict(ob)

for loc in locs:
   loc = compute(loc)  # What to change here to make loc a reference of actual locs iteration ?
Run Code Online (Sandbox Code Playgroud)
  • locs必须包含最终处理的响应!
  • 我不想用enumerate,没有它可能吗?

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

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

传递指针参数,在C++中传递值?

传递指针参数,在C++中传递值?因为我看到指针的任何更改都不会反映在方法之外.我通过解除引用指针所做的更改会被反映出来.

在这种情况下,使用指针指向函数的参数是否可以接受/标准过程来修改函数中的指针值?

c++ pointers function pass-by-value

29
推荐指数
2
解决办法
3万
查看次数

基于值与Const参考的函数重载

声明如下的内容

void foo(int x)        { std::cout << "foo(int)"         << std::endl; }
void foo(const int &x) { std::cout << "foo(const int &)" << std::endl; }
Run Code Online (Sandbox Code Playgroud)

有意义吗?调用者如何能够区分它们?我试过了

foo(9);  // Compiler complains ambiguous call.

int x = 9;
foo(x);  // Also ambiguous.

const int &y = x;
foo(y);  // Also ambiguous.
Run Code Online (Sandbox Code Playgroud)

c++ overloading pass-by-reference pass-by-value

28
推荐指数
2
解决办法
8372
查看次数

Java真的按值传递对象吗?

可能重复: Java是否通过引用传递?

public class myClass{
    public static void main(String[] args){
        myObject obj = new myObject("myName");
        changeName(obj);
        System.out.print(obj.getName()); // This prints "anotherName"
    }
    public static void changeName(myObject obj){
        obj.setName("anotherName");
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道Java通过值传递,但为什么它obj在前面的示例中通过引用传递并更改它?

java terminology parameter-passing pass-by-reference pass-by-value

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