实参、形参 C++
值传递方式:
1、普通调用,形参与实参为同样的类型
fun(int i)()
fun(Student stud)
()
main()
{
fun(1);
Student s1;
fun1(s1);
}
在函数中可以修改形参的值,但不能改变其对应的实参的值(形参的值变化无法传送到实参) 原因:在函数调用时将建立一个新的对象,是实参对象的拷贝,实参与形参分别占有不同的存储空间,无论形参是否修改都不会改变实参的值。 这种形式的虚实结合,会产生实参的拷贝。当传递的对象较大时,时间开销和空间开销都比较大。
2、使用指针作为函数参数
fun(int * i)
{}
fun(Student * stud)
{}
main()
{
int i = 1;
fun(&i);
Student s1;
fun1(&s1);
}
其实质也是值传递方式,只是传递的值是一个地址,实参将地址传递给形参,虚实结合后,实参与形参指向同样的地址。 其操作的都是同一个对象。 虚实结合时,也会产生实参的拷贝,为形参分配内存,用来存放指针值(即地址)
2、引用传递方式:用引用作为函数参数
fun(int& i){}
fun(Student& stud){}
main()
{
int i = 1;
fun(i);
Student s1;
fun1(s1);
}
不会为形参分配存储空间(常称为建立实参的一个拷贝),而是把实参的地址传递给形参(引用名),引用名也指向实参变量
/******************************************************/
1、普通调用
函数声明时fun(Student stud){};
而在调用时:
Student s1;
fun1(s1);
/******************************************************/
函数声明时fun(Student * stud){}
而在调用时:
Student s1;
fun1(&s1);
/******************************************************/
函数声明时:
而在调用时:
Student s1;
fun1(s1);
/******************************************************/
我一直不明白:
3中方式在声明与调用之间,实参与形参的对应关系是什么?
把红色部分实参与形参写到一起。。中间再加个等号。。原来是这样:
前提:
Student s1;
实参 形参
Student stud
= s1
;
Student *stud
= &s1
;
Student &stud
= s1
;
好吧,You Know...
看后勿喷!
/******************************************************/