标签: pass-by-reference

什么时候在PHP中传递引用

我想知道当你只读取一个变量时它是否是传递引用的好方法,或者它是否应该总是作为一个值传递.

传递引用的示例:

$a = 'fish and chips';
$b = do_my_hash($a);
echo $b;

function &do_my_hash(&$value){
   return md5($value);
}
Run Code Online (Sandbox Code Playgroud)

传值的示例:

$a = 'fish and chips';
$b = do_my_hash($a);
echo $b;

function do_my_hash($value){
   return md5($value);
}
Run Code Online (Sandbox Code Playgroud)

哪个更好 ?例如,如果我要运行1000轮的循环?

循环示例:

for($i = 0 ; $i < 1000 ; $i++){
   $a = 'Fish & Chips '.$i;
   echo do_my_hash($a);
}
Run Code Online (Sandbox Code Playgroud)

php pass-by-reference

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

在c ++中通过引用传递可选参数

我在C++中遇到了可选函数参数的问题

我要做的是编写带有可选参数的函数,该函数通过引用传递,这样我就可以用两种方式(1)和(2),但是(2)我真的不在乎什么是的价值mFoobar.

我试过这样的代码:

void foo(double &bar, double &foobar = NULL)
{
   bar = 100;
   foobar = 150;
}

int main()
{
  double mBar(0),mFoobar(0);

  foo(mBar,mFoobar);              // (1)
  cout << mBar << mFoobar;

  mBar = 0;
  mFoobar = 0;

  foo(mBar);                     // (2)
  cout << mBar << mFoobar;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但它崩溃了

void foo(double &bar, double &foobar = NULL)
Run Code Online (Sandbox Code Playgroud)

有消息:

error: default argument for 'double& foobar' has type 'int'
Run Code Online (Sandbox Code Playgroud)

没有函数重载可以解决它吗?

c++ pass-by-reference optional-parameters

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

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万
查看次数

仅将ArrayList作为值传递而不是引用

简单地说,我有一个带有ArrayList参数的方法.在方法中,我修改ArrayList的内容,仅用于与方法返回的内容相关的目的.因此,我不希望作为参数传递的ArrayList完全受到影响(即不作为引用传递).

我尝试的一切都未能达到预期的效果.我需要做什么才能在方法中使用ArrayList的副本,但不能更改实际变量?

java reference arraylist pass-by-reference

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

这是C中未定义的行为吗?如果不是逻辑上预测输出

代码1

#include <stdio.h>
int f(int *a, int b) 
{
  b = b - 1;
  if(b == 0) return 1;
  else {
    *a = *a+1;

    return *a + f(a, b);
  }
}

int main() {
  int X = 5;
  printf("%d\n",f(&X, X));
}
Run Code Online (Sandbox Code Playgroud)

考虑这个C代码.这里的问题是预测输出.从逻辑上讲,我得到31作为输出.(机器输出)

当我将return语句更改为

return f(a, b) + *a;
Run Code Online (Sandbox Code Playgroud)

我逻辑上得到37.(机器输出)

我的一个朋友说,在计算返回语句时

return *a + f(a, b);
Run Code Online (Sandbox Code Playgroud)

我们计算树的深度值,即*先f(a, b)调用然后调用,而在

return f(a,b) + *a;
Run Code Online (Sandbox Code Playgroud)

它在返回时被解析,即先f(a, b)被计算然后*a被调用.

通过这种方法,我尝试自己预测以下代码的输出:

代码2

#include <stdio.h>
int foo(int n) …
Run Code Online (Sandbox Code Playgroud)

c pass-by-reference undefined-behavior output

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

如何从衍生的后台服务访问原始活动的视图

我有一个名为A的活动,在选择菜单项0时,它产生服务B,它在新线程中启动一个可运行的C. 我在活动A中有一个TextView,我想在线程C中访问它.

我已经尝试将TextView作为公共静态字段,但这会产生以下错误:

07-21 07:26:25.723: ERROR/AndroidRuntime(1975): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
07-21 07:26:25.723: ERROR/AndroidRuntime(1975):     at android.view.ViewRoot.checkThread(ViewRoot.java:2440)
07-21 07:26:25.723: ERROR/AndroidRuntime(1975):     at android.view.ViewRoot.invalidateChild(ViewRoot.java:522)
07-21 07:26:25.723: ERROR/AndroidRuntime(1975):     at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:540)
07-21 07:26:25.723: ERROR/AndroidRuntime(1975):     at android.view.ViewGroup.invalidateChild(ViewGroup.java:2332)
07-21 07:26:25.723: ERROR/AndroidRuntime(1975):     at android.view.View.invalidate(View.java:4437)
07-21 07:26:25.723: ERROR/AndroidRuntime(1975):     at android.widget.TextView.updateAfterEdit(TextView.java:4593)
07-21 07:26:25.723: ERROR/AndroidRuntime(1975):     at android.widget.TextView.handleTextChanged(TextView.java:5932)
07-21 07:26:25.723: ERROR/AndroidRuntime(1975):     at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:6081)
07-21 07:26:25.723: ERROR/AndroidRuntime(1975):     at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:889)
07-21 07:26:25.723: ERROR/AndroidRuntime(1975):     at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:352)
07-21 07:26:25.723: ERROR/AndroidRuntime(1975):     at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
07-21 07:26:25.723: ERROR/AndroidRuntime(1975):     at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432) …
Run Code Online (Sandbox Code Playgroud)

user-interface android pass-by-reference textview

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

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

基于值与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
查看次数

参考对象的STL容器

我知道STL容器会复制对象.所以说我有一个

list<SampleClass> l;
Run Code Online (Sandbox Code Playgroud)

每当我这样做

SampleClass t(...);
l.push_back(t);
Run Code Online (Sandbox Code Playgroud)

将制作一份副本.如果SampleClass很大,那么它将非常昂贵.

但是,如果我将l声明为引用的容器,

list<SampleClass&> l;
Run Code Online (Sandbox Code Playgroud)

当我做

l.push_back(t);
Run Code Online (Sandbox Code Playgroud)

它会避免复制对象吗?

c++ stl reference pass-by-reference

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