传递参数的值和引用有什么区别?
传值和传引用的区别是什么?
这个问题的出现是因为指针可以很容易被误用。因此,引用应该是首选。如果你将一个空指针传递给with_ptr函数,你将得到未定义的行为,而使用with_ref函数则不可能出现这种情况。
我认为在函数内部不清楚i的值是否可以被修改。
这是非常清楚的。如果你看到一个以非const引用参数接收参数的函数,你可以假设它会被修改。
那么,如果我能做同样的事情,有什么区别吗?
你读了第二段吗?
“在第一种情况下,你不能修改参数。”这是不正确的。和任何常规参数一样,你可以在函数内部对它进行赋值。例如,i = NULL。
就像在函数外部一样。
嗯,你应该说过这个。和所有传值参数一样,函数外部不会受到影响。但是引用在函数内部甚至也是不可修改的。
传递值和传递引用的主要区别是什么?这个问题的出现是因为以下原因:
1) 通过引用传递可以更简单地访问元素 i
而不是 *i
2) 通常情况下,不能将 null
引用传递给方法,但可以传递一个 null
指针
3) 无法更改引用的地址,但可以更改指针的地址(尽管指针本身是按值传递的,这个更改在函数退出时会被丢弃)
以上是传递值和传递引用的主要区别。当我们在编程中需要传递参数给函数时,我们可以选择是通过值传递还是通过引用传递。通过引用传递参数可以提供更简单的元素访问方式,而不需要使用指针操作。然而,需要注意的是,通过引用传递参数时,不能传递 null
引用,而通过指针传递参数时可以传递 null
指针。
另外,虽然可以更改指针的地址,但这个更改只会在函数退出时被丢弃。这是因为指针本身是按值传递的,即函数接收的是指针的副本而不是指针本身。因此,对指针地址的更改只会影响副本,而不会影响原始指针。
希望这些信息对您有所帮助。
传递参数时按值传递和按引用传递的区别是什么?
在函数调用时,如果按值传递参数,那么对变量的修改将局限于函数内部,因为在调用函数时会将值复制一份。而对引用参数的修改会传播到原始值。
指针和引用的区别在很大程度上是语法上的区别,正如你在代码中所看到的。此外,指针可以被重新赋值指向其他对象(除非它被声明为const),而引用不行;相反,对引用的赋值将会赋值给引用的值。
我认为函数内部并不清楚i的值可以被修改。
相反,这是非常清楚的:函数的签名告诉你这一点。
实际上,可以认为在函数外部并不清楚。这就是为什么最初的C#版本要求在通过引用调用时明确注释为ref(即使用f(ref x)而不是简单的f(x))。这类似于在C++中使用f(&x)调用函数,以明确传递指针。
但是在最新版本的C#中,通过ref进行调用的使用是可选的,因为它并没有提供足够的优势。
+1 “函数的签名告诉你这一点。”... 始终假设没有const参数的函数将修改参数。