简单的问题,弱弱的问,可以用常量作为函数的形参吗?

来源:百度知道 编辑:UC知道 时间:2024/05/13 18:31:20
就是比如function(const a,const b){
.....}
这样子行不行? 如果可以,一般在什么情况下使用啊?
我上面的写错了 应该是这样子,
比如:function(const int a,const int b){
....}
回答清楚些行么?如果用常量做为形参,那值是怎么传递的?
实参传下来,形参变成常数了,就是不能修改了。那函数调用结束,常量释放不?
我感觉5楼在尽力的把这个道理说清楚吧,我读了好几遍,还是有点概念模糊。
第一个问题已经弄的比较清楚了,第二个还是没怎么明白,说的通俗一点,就是想弄明白这个常量的形参到底是存在哪里的?按照调用函数依靠栈的原理,等这个函数运行完之后,整个栈的内存应该都被释放了,那这个常量应该是不存在了吧?
你后面提到的#DEFINE是不是在说它跟我这里定义的形参是不同的?#DEFINE定义的是属于静态存储方式,函数调用是属于动态的?
以上是我对你说的话的理解,不知道对还是不对?我留下我的QQ和EMail,希望能多于您交流...28554811 28554811@qq.com

可以.
搞明白这个问题需要弄清楚一个事实,静态与常量是两个概念.
就楼主的问题,先澄清调用函数是如何像被调用函数传递值的,形式参量是函数定义中在函数头部声明的变量.当一个函数被调用时(注意,是被调用的时候,而不是声明ANSI原型的时候,ANSI声明的时候编译器只需要知道将要有的变量类型即可.)将创建被声明为形式参量的变量,然后用实参的值初始化该变量.注意这里的初始化.所以你完全可以声明一个常量的形参,虽然在被调用函数中这个值将不能被更改.(简单的写段代码测试一下即可).
第二个问题,在代码块内像楼主那样声明的常量具有代码块作用域,自动存储时期,所以在被调用函数结束后,此变量会在内存中释放.而通常使用#DEFINE声明的常量其实是具有静态存储时期了.一定不要把常量与内存模式搞混^^^^

补充:哈,你理解的没错.那常量不存在了(上面语无伦次的再后面说变量了哈).至于#DEFINE嘛,我上面说错了.其实它并不是C的语句,它是预处理指令.编译器在处理这个预处理指令的时候会把后面出现的"常量标识"全部替换成"数值".再执行编译\连接.这是一种替代机制,其实叫"compiletime substitution".与何种存储模式无关.CONST不同.CONST修饰符是把一个变量变成"只读值"的形式.
而且可以创建一个"静态的只读值"(static const (type)).但是函数调用中的形参不可以声明为静态模式.(咳^^^越说越多^^^)

function(const int a,const int b)并不是常量作为函数的形参,确切的讲是常量参数(const parameter),它和普通参数是一样的,它的作用只是禁止在函数内改变它的值。

function(const int a,int b)
{
a = 10;//编译时会出错
b = 20;//编译时正确
}

弱弱来讨论下
1.形参咋没类型?常量也有类型吧。
2.没看到过常量形参

不可以
调用函数时