引用传递
- void
OutputNumber(int &nNumber) //设置引用类型参数 - {
-
cout << nNumber << endl; //输出结果 -
nNumber = 20; //修改参数值,将影响到实际参数 - }
- int
main(int argc, char* argv[]) - {
-
int nNum = 10; //定义一个变量 -
OutputNumber(nNum); //调用OutputNumber函数 -
cout << nNum << endl; //输出变量值 -
return 0; - }
指针传递
- void
OutputNumber(int *pNumber) //使用指针作为函数参数 - {
-
cout << *pNumber << endl; //输出参数值 -
*pNumber = 20; //设置参数值 - }
- int
main(int argc, char* argv[]) - {
-
int nNum = 10; //定义一个整型变量 -
OutputNumber(&nNum); //调用OutputNumber函数 -
cout << nNum << endl; //输出nNum -
return 0; - }
输出结果是一样的:10 20
在编写函数时,如果函数需要采用引用方式传递,使用指针和引用作为参数类型都是可以的。使用指针和引用类型作为函数参数各有优缺点,视具体环境而定。对于引用类型,引用必须被初始化为一个对象,并且不能使它再指向其他对象,因为对引用赋值实际上是对目标对象赋值。这是引用类型的缺点,但也是引用类型的优点,因为在函数调用时需要验证引用参数的合法性。例如,如果函数OutputNumber采用引用参数类型,则语句"OutputNumber(0);"是非法的。如果函数OutputNumber采用指针类型参数,则语句"OutputNumber(0);"是合法的。因为0被认为是一个空指针,对空指针操作必然会导致地址访问错误。因此对于指针对象作为函数参数,函数体中需要验证指针参数是否为空。这是使用指针类型作为函数参数的缺点。但是,使用指针对象作为函数参数,用户可以随意修改指针参数指向的对象,这是引用类型参数所不能的。另外的区别就是上面的调用时用法的区别了了。引用时只需要传递值就行,但是指针的话需要传递地址。