1 非引用实参
每次调用函数时,都会重新创建该函数所有的形参,此时所传递的实参将会初始化对应的形参。
形参的初始化与变量的初始化一样:如果形参具有非引用类型,则复制实参的值,如果形参为引用类型(第 2.5 节),则它只是实参的别名。
指针形参————————————————可以修改实参指针指向的值,但是不能修改实参指针
函数的形参可以是指针(第 4.2 节),此时将复制实参指针,
如果函数形参是非 const 类型的指针,则函数可通过指针实现赋值,修改指针所指向对象的值:
void reset(int *ip)
{
*ip = 0; // changes the value of the object to which ip points
ip = 0; // changes only the local value of ip; the argument is unchanged
}
调用 reset 后,实参依然保持原来的值,但它所指向的对象的值将变为 0:
如果不想让实参指向的值发生改变。。加个const
void reset(const int *ip)
{
}
const 形参
如果函数使用的 形参既不是引用形参也不是const 形参,那么可以给改参数传递 const 实参,当然 非const 实参也能传递
这种行为源于 const 对象的标准初始化规则(第 2.4 节)。因为初始化复
制了初始化式的值,所以可用 const 对象初始化非 const 对象,
如果函数形参是const 形参 的话,而且不是引用类型的const 形参,
void fcn(const int i) { /* fcn can read but not write to i */ }
由于实参仍然是以副本的形式传
递,因此传递给 fcn 的既可以是 const 对象也可以是非 const 对象。