拖车文
回答者
回答于 2026-11-10
在C语言中定义int fun(int a, int b)时,形参a和b的作用域与生命周期如下:
直接回答
- 作用域:块作用域(Block Scope),仅在
fun函数体的花括号{}内可见。 - 生命周期:自动存储期(Automatic Storage Duration),从函数被调用、形参完成初始化时开始,到函数执行完毕返回时结束。
判断依据
根据C语言标准,函数参数被视为函数最外层块中声明的局部变量。调用函数时,系统会在栈帧上为这些参数分配存储空间,并用对应的实参值进行拷贝初始化。当函数通过return语句或执行到末尾返回时,该栈帧被销毁,a和b所占用的内存随之释放。
适用条件
- 此规则适用于所有标准C版本(C89/C90、C99、C11等)。
- 仅针对按值传递的普通形参。若形参是指针类型(如
int *p),指针变量本身的生命周期仍随函数结束而终止,但其指向的堆内存不受影响。
常见误区
- 误认为形参作用域包含调用处:形参只在被调函数内部有效,主调函数无法直接访问被调函数的形参名。
- 混淆生命周期与值的持久性:函数返回后,形参变量不复存在,不能试图通过返回局部变量的地址来访问其值。
- 认为修改形参会影响实参:C语言采用值传递,函数体内对
a或b的重新赋值只改变局部副本,不会影响调用方传入的原始实参变量。