因为程序在运行时才会给程序中定义的变量开辟内存空间和进行初始化,函数是在被调用的时候才会给形参和函数体内定义的变量开辟内存空间,带有默认形参的函数在给形参开辟空间后就回先把默认值赋给形参,若没有实参传递,形参值就是默认值,默认值必须是系统能确切找得到的值才能进行对带有默认值形参进行初始化,而局部变量不是在正在被调用的函数内定义的(形参是函数一开始就定义的)或者在其他函数内定义并被使用完就被释放掉了,因此系统就会找不到一个确切的值赋给形参,所以函数参数默认值不允许为局部变量。
只有在函数内部定义的变量才是局部变量。这句话是不对的。
局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量。局部变量只在定义它的函数或复合语句范围内有效,只能在定义它的函数或复合语句内才能使用它们。局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。
扩展资料:
函数main()中定义的局部变量也只在主函数中有效,而不能因为在主函数中定义在整个文件或程序中有效。主函数也不能使用其他函数中定义的局部变量。因为主函数也是一个函数,它与其他函数是平行关系。
不同函数中可以使用相同名字的局部变量,它们代表不同的对象,分配不同的单元,互不干扰。形式参数属于被调函数的局部变量。例如f1函数中的形参a,也只在f1函数中有效,其他函数可以调用f1函数,但不能引用f1函数中的形参a。
函数的参数是在函数内部可用的,是局部变量
但如果参数是个数组或对象(引用类型),则函数内部是可以影响到外部传参之前的变量的值
JavaScript函数传参传递的仍然是值传递,而不是引用传递
c语言中形参与实参:
形参 form parameter
实参 real parameter
出现在函数定义中的参数,就叫形参
出现在函数调用中的参数,就叫实参
函数定义:
int max( int a , int b ) //这里的a,b就是形参
{
//在函数中,形参就可以当作是一个局部变量。
if ( a>b ) return a;
else return b;
}
函数调用
int main()
{
int a=3,b=5 ;
printf( "max=%d\n" , max(a,b) ); //这里的a,b就是实参 C中的函数参数传递是传递变量的数值,因此,这里相当于调用 max(3,5) 而子函数中收到的就会是 3 5这两值,而与ab变量没有关系。
return 0;
}
局部变量与全局变量的区别:
1)局部变量只在本函数范围有效,在此函数以外是不能使用这些变量;全局变量的有效范围是从定义变量的位置开始到本源文件结束。
2)局部变量是程序运行到该函数时给该变量分配内存空间,函数结束则释放该内存空间;全局变量是程序运行时事先分配内存空间,当程序结束时释放内存。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)