实参、形参 C++
2012-09-21 22:50
197 查看
值传递方式:
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...
看后勿喷!
/******************************************************/
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...
看后勿喷!
/******************************************************/
相关文章推荐
- 关于C和C++中函数调用时的形参和实参
- C++实参与形参
- C++ 函数使用形参传入二维数组实参的方法
- C/C++中的实参和形参
- C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结
- C++实参与形参
- C++ 实参和形参 交换变量值
- c++指针使用形参改变实参的方法
- c++--实参和形参
- C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结
- C++实参与形参
- C++实参与形参
- C/C++函数形参传实参时值传递、指针传递、引用传递的区别
- C++实参与形参
- C/C++函数形参传实参时值传递、指针传递、引用传递的区别
- C++ 实参和形参
- C++实参与形参
- c++形参和实参同名时,如何单步执行观察形参的变化。
- C++实参与形参
- C++中数组名作为函数的形参和实参