函数中常用到形参、局部变量、静态局部变量(static),那三者的区别是什么?
从本质上说,三者均属于局部作用于中的变量,其中,局部变量又可分为普通局部变量和静态局部变量。差别在于以下三点:
(1)形参的作用域为整个函数体,而两者局部变量的作用域为从定义处到包含该变量定义的块的结束处;
(2)形参由调用函数的实参初始化,局部变量用初始化式进行初始化,且在程序执行流程第一次经过该对象的定义语句是进行初始化。另外,静态局部变量的初始化在整个程序执行过程中只进行一次。
(3)形参和普通局部变量均为自动变量,在每次调用函数时创建,函数结束时撤销;而静态局部变量的生命周期跨越了函数的多次调用,它在创建后直到程序结束时菜撤销。
如,记录函数被调用的次数:
int count_call()
{
static int ct = 0; // 定义为静态变量,其值不会销毁
return ct++;
}
下次调用函数时,ct 的值保持为上次函数结束时的值,下次其初始化式将不再执行。