Vulkan

实参、形参 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);

/******************************************************/

2、使用指针作为函数参数

函数声明时fun(Student * stud){}

而在调用时:

Student s1;  

fun1(&s1);

/******************************************************/

3:用引用作为函数参数

函数声明时:

fun(Student& stud){}

而在调用时:

Student s1;

 fun1(s1);

/******************************************************/

我一直不明白:

3中方式在声明与调用之间,实参与形参的对应关系是什么?

把红色部分实参与形参写到一起。。中间再加个等号。。原来是这样:

前提:

Student s1;

实参                    形参

Student stud    = s1    ;

Student *stud  =  &s1   ;

Student &stud  = s1    ;

好吧,You Know...

看后勿喷!

/******************************************************/

posted on 2012-09-21 22:50  Vulkan  阅读(203)  评论(0编辑  收藏  举报

导航