谁来解释下《C和指针》中的这句话什么意思?

来源:百度知道 编辑:UC知道 时间:2024/06/20 09:06:43
函数的形式参数不能声明为静态,因为实参总是在堆栈中传递给函数,用于支持递归。
三楼说的“而实参是在函数调用时存在的,调用结束,实参就丢失了,是放在堆栈中的,”实参应为形参吧?是不是打字误打了?

因为静态变量的储存期是永久性的,从程序开始运行,直到结束;
而实参是在函数调用时存在的,调用结束,实参就丢失了,是放在堆栈中的,
所以有时候程序中递归调用次数过多,造成栈溢出.
所以函数的参数不能声明为静态,又要永久性的存在,可又必须放在堆栈中,
这是不可能的.

前半句意思是这样。
比如
void a(int b){}
这里的int b不能加static关键字修饰,即
void a(static int b){}
是错误的。
后半句还是看别人怎么说吧。

三楼应该是对的.
因为静态变量存放在栈中而栈的空间是有限的...如果使用递归调用很容易就使内存溢出..
一般的变量存放在堆中,堆相对于栈来说就要大的多了.
而使用静态变量的好处就是能够保证变量的值在函数被调用结束前不被改变.他于CONST又有一定的区别....

形参是声明 实参是数据 还不好理解的话就当形参是变量名好了

变量名可是不会丢的

你要真实地理解它有什么用呢?
把“不能声明为静态”背下来就不行吗?

这个与参数的存储结构有关
声明为static的局部变量的值可以改变 在编译时期为其分配内存 而且这个内存的地址是固定的 此后函数无论被调用多少次 都不会改变这个地址也不会再为此局部变量分配内存 直到程序运行结束 也就是说它的生命周期和程序运行的生命周期相同 尽管脱离函数你可能无法获取这个变量的引用 但它却真实的存在着
声明为const的变量的值才是不能被改变的,但指向const的指针变量是可以改变的