参数和参数之间有什么区别?

1041

当谈论方法时,我从来不确定是否使用"argument"或"parameter"或其他词。无论哪种方式,其他人都知道我的意思,但什么是正确的术语?这些术语的历史是什么?

我是一名C#程序员,但我也想知道不同语言中是否使用不同的术语。

记录一下,我是一个自学的人,没有计算机科学背景。(请不要告诉我去阅读Code Complete,因为我是为了其他没有Steve McConnell的精彩著作副本的人而提出这个问题。)

总结

普遍认为,在团队环境中可以交替使用这些术语。除非你正在定义精确的术语;那么你还可以使用“正式参数”和“实际参数”来消除歧义。


20
我会将它们互换使用,但是还没有人嘲笑过我。 "这个函数有4个参数"和"这个函数接受4个参数"听起来一样。 - Gishu
92
除了在描述参数工作和参数传递等方面时,可以互换使用它们。此时,精确的术语(有时很难表达)是有用的。 - Jon Skeet
6
至少有两个与语言无关的非封闭版本的这个问题:https://dev59.com/THA75IYBdhLWcg3wqK7_ 和 https://dev59.com/hXRC5IYBdhLWcg3wCMrX。还有另一个关于C#的版本,我已经请求合并。 - Pops
3
这是一个不断变化的目标。当我几年前开始学习信息技术时,参数通常都是“形式参数,实际参数”。根据这里的答案,现在显然是相反的顺序。 - user207421
9
我认为无论您处于正式环境还是非正式环境,都应努力使用正确的术语。这很简单。当您调用一个方法时,您会传入参数。当您定义该方法时,您正在定义将从方法/函数调用中获取参数的参数。参数 - 与函数相关联的自变量,并确定函数的值。参数 - 定义特定过程或活动范围的限制或边界。 - jsquaredz
显示剩余3条评论
38个回答

1328

参数是方法定义中的变量。当调用一个方法时,参数就是你传递给该方法的数据。

public void MyMethod(string myParam) { }

...

string myArg1 = "this is my argument";
myClass.MyMethod(myArg1);

302
一个帮助记忆的头韵口诀是:争论需真凭实据(Arguments are Actual)。;) - thSoft
15
答案提到“参数是方法定义中的变量”,但如果有人区分“声明”和“定义”,最好说“方法声明”而非“方法定义”。 - nandan
181
你需要定义参数,并提出论据。 - Greg M. Krsak
8
参数 => 当我们定义函数时,参数是指在方法中需要的变量。参数值会在调用该函数时传递给方法。参数允许您向函数传递数据以执行其操作。 参数值 => 当我们调用函数时,参数值是我们向函数传递的实际数据值。这些值将被传递到函数中的相应参数中,函数将使用它们来执行其操作。 - Prageeth godage
41
参数是名称,而参数值则是实际数值。 - Aziz Alto
显示剩余14条评论

475

参数(Parameter) 是在函数声明中的变量。

参数值(Argument) 是传递给函数的实际变量值。


12
通常将传递给方法的参数列表称为 *argsARGV,而不是 *params :-) - karatedog
9
*params 是一个变量名,用于保存参数名称(可能用于内省)。 - trss
18
@karatedog 这完全符合这个区别。在声明时,参数被命名,而在调用时只知道参数。语法*args声明了一个名为args的参数,其值为参数列表(名称和类型在声明时已知),参数数量只有在调用时才会知道。 - Emil Lundberg
我认为最好记住相反的方式。只要记住“参数是传递给函数的实际值”,那么参数就是另一个。在声明中的“变量”比“传递的值”更难记住。 - icc97

193

简单:

  • PARAMETER → PLACEHOLDER(这意味着一个占位符属于函数命名并在函数体中使用)
  • ARGUMENT → ACTUAL VALUE(这意味着一个实际的值,由函数调用传递)

15
好的记忆钩子。 - Advena

162
参数是函数声明中的变量。
实参是传递给函数的实际变量值。

Image of a code sample. Function sum takes parameters param1 and param2. It returns param1 plus param2. The function sum is called with the arguments 5 and 6. The image points out that param1 and param2 are parameters, whereas 5 and 6 are arguments.


这不就是 @Rinat Abdullin's answer 的复制(包括我现在已经修正的语法错误),只是加了一张图片吗? - icc97
13
我个人认为这张图片很有帮助。 - Darrell Root
一张图片胜过千言万语。 - Chrisuu

90

已经有一个维基百科条目关于这个主题(见Parameter),它定义和区分了参数和参数值这两个术语。简而言之,参数是函数/过程/方法签名的一部分,而参数值是在运行时和/或调用现场提供给参数的实际值。

维基百科文章还指出,这两个术语通常被视为同义词(特别是在非正式的代码推理中):

虽然参数也常被称为参数值,但参数值更应该被视为在运行时调用子例程时分配给参数变量的实际值或引用。

给定以下在C语言中实现的一个将两个整数相加的示例函数,其中xy将被称为其参数:

int add(int x, int y) {
    return x + y;
}

在使用add的调用点(例如下面示例中所示),123456将被称为该调用的参数

int result = add(123, 456);

此外,一些语言规范(或正式文档)选择专门使用参数(parameter)实参(argument),并使用如形式的(formal)实际的(actual)等形容词来区分这两种情况。例如,C/C++文档通常将函数参数(parameters)称为形式参数(formal arguments),而将函数调用参数(arguments)称为实际参数(actual arguments)。关于此,请参见Visual C++ 语言参考中的“形式参数和实际参数”。


+1 如果能解释它们的常见用法以及它们的正式定义,并提到“形式”和“实际”参数的常见用法来消除歧义。 - Mechanical snail
这是一个很好的解释,但与概念的简单性相比,它几乎不可能理解。参数是被接受的内容,而参数是被调用的内容。这是一个单向的过程。 - ihodonald
@ihodonald,这听起来不太对。参数是接受的内容,而参数是在调用时提供的内容。但是参数是由参数接受的,因此接受的是参数,而不是参数本身。如果说有什么区别的话,在调用参数(或至少是带有参数的某个函数)时给出了一个参数,所以更多的是调用了参数而不是参数本身。 - Richard Abey-Nesbit

36

30
假设你是一家航空公司。你建造了一架飞机并在其中安装了座位。然后,你让乘客上飞机并将其送到目的地。乘客下机后,第二天你再次使用同样的飞机和座位,但这次换了不同的乘客。
在这个比喻中,“飞机”就是你的函数。
“座位”则是函数的参数。
而“乘客”则是被传入这些参数的实际值。
function fly(seat1, seat2) {
    seat1.sayMyName();
    // Estraven
    seat2.sayMyName();
    // Genly Ai
    etc.
}

var passenger1 = "Estraven";
var passenger2 = "Genly Ai";

fly(passenger1, passenger2); 

1
我听过一个类似的比喻,其中邮箱是参数,而其中的邮件则是参数值。 - Steve A
1
这句话的意思是乘客们就是坐在那些座位上的人。听起来好像所有的乘客都对航空公司的运作方式有意见。 ;) - Tristan Bailey

23

在程序员和作者中,参数(parameters)和实参(arguments)这两个词经常被误用。在处理方法时,“参数”一词用于标识方法签名中的占位符,而“实参”则是传递给方法的实际值。

MCSD认证工具包(70-483考试),使用C#编程,第一版,Wrox出版社,2013年

真实案例场景

// Define a method with two parameters
int Sum(int num1, int num2)
{
   return num1 + num2;
}

// Call the method using two arguments
var ret = Sum(2, 3);

18

一般而言,参数(parameter)和实参(argument)这两个术语可以互换使用,表示传递到函数中的信息。

但从函数的角度来看:

  • 参数(parameter)是函数定义中括号内列出的变量。
  • 实参(argument)是在调用函数时发送到函数的值。

15

永远记住:
参数是传递的,而参数是接收的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接