实参、格式参数、哑元参数与形参的区别及术语辨析
嘿,这个问题问得好!编程里的术语混淆太常见了,尤其是这种跨语境、带历史遗留的叫法,我给你理得明明白白:
术语定义与核心区别
先从最基础的一对核心概念说起,其他术语都是围绕它们衍生的:
- 形参(Formal Parameters):函数定义时括号里写的变量名,是用来接收调用时传入值的「占位符」。比如
void calculate(int a, int b)里的a和b,属于函数签名的一部分,只在函数内部有效。 - 实参(Actual Arguments):调用函数时实际传入的具体值或表达式,是真正给函数的输入数据。比如
calculate(5, 3)里的5和3,会被赋值给对应的形参。
再看另外两个术语:
- 哑元参数(Dummy Arguments):这是形参的同义词,早期像Fortran这类语言里常用这个叫法,尤其用来强调那些「占位置但实际没被用到」的形参(比如为了兼容旧接口保留的参数),本质还是函数定义时的占位符。
- 格式参数(Format Arguments):这是实参的一个特定场景子集,特指格式化字符串时传入的参数。比如C语言
printf("Score: %d", score)里的score,Pythonprint(f"Name: {name}")里的name,都是格式参数——它们属于实参,但只针对格式化操作这个场景。
同义词确认与认知纠正
同义词梳理
- 形参(Formal Parameters) ↔ 哑元参数(Dummy Arguments):完全同义,只是不同语境/年代的称呼,哑元参数更偏向强调「占位」属性,但核心都是函数定义时的参数。
- 格式参数(Format Arguments) ⊂ 实参(Actual Arguments):格式参数是实参的一部分,只在格式化场景下这么叫,不是完全等同的同义词。
关于main函数括号内容的纠正
你问的「main函数等函数中,括号内的数据是否属于parameters/arguments?」——得分两种情况看:
- 当你定义main函数时,比如
int main(int argc, char *argv[]),括号里的argc和argv是形参(Formal Parameters/哑元参数),因为这是函数定义阶段的占位符。 - 当程序启动时,操作系统会自动调用main函数,传入的实际命令行参数(比如参数数量、参数列表)就是实参(Actual Arguments)——只不过这个调用是系统完成的,不是我们手动写代码触发的。
给你个直观的代码例子:
// 这里的argc、argv是形参(formal parameters/dummy arguments) int main(int argc, char *argv[]) { // 调用printf时,argc是格式参数(属于实参的一种) printf("你传入了%d个命令行参数\n", argc); return 0; }
内容的提问来源于stack exchange,提问作者Hassaan Arif
相关产品推荐
相关产品推荐

