C++参数传递的四种方法

目前我所了解的主要有四种参数传递:

1.值传递 2.采用引用 3.采用指针 4.采用指针型引用 


1.值传递 :不能改变外部目标 a的值
class shu

public: 
void Out( int tempa )
{  
cout << "tempa值"  <<  tempa << endl;
tempa ++;
cout << "tempa值"  <<  tempa << endl;


}

}; 
int main(int argc, char **argv)
{
int a  = 1; 
 
shu  sss;
sss .Out( a ) ;
    cout << a << endl;//再一次输出a


system("pause");
return 0;
}
可以看出a在传入函数后实际上是进行了一次复制,所以目标a的值没有改变。


2.采用引用:能改变外部目标 a的值 
class shu

public: 
void Out( int &tempa )
{  
cout << "tempa值"  <<  tempa << endl;
tempa ++;
cout << "tempa值"  <<  tempa << endl;


}

}; 
int main(int argc, char **argv)
{
int a  = 1; 
 
shu  sss;
sss .Out( a ) ;
    cout << a << endl;//再一次输出a


system("pause");
return 0;
}
可以看出目标a 的值改变了,引用相当于是直接把外部的参数拿过来了。
3.采用指针:能改变外部目标 a的值
class shu

public: 
void Out( int * tempa )
{  
cout << "tempa值"  << *tempa << endl;
(*tempa) ++;
cout << "tempa值"  << *tempa << endl;


}

}; 
int main(int argc, char **argv)
{
int a  = 1; 
 
shu  sss;
sss .Out( &a ) ;
    cout << a << endl;//再一次输出a


system("pause");
return 0;
}
可以看出经过out函数,a的值改变为2。这说明采用指针来传参可以改变目标a的值。


4.采用指针型引用:为指针和引用的结合。可以直接把外部的指针拿进去用,同时也可以改变该指针对应的值:
class shu

public: 
void Out( int *&tempa )
{  
cout << "tempa值"  <<  *tempa << endl;
(*tempa )++;
cout << "tempa值"  <<  *tempa << endl;


}

}; 
int main(int argc, char **argv)
{
int a  = 1; 
    int *b = &a;
shu  sss;
sss .Out( b ) ;
    cout << a << endl;//再一次输出a


system("pause");
return 0;
}
可以看到 out函数直接把指针拿进去用了,改变了目标a  值。
综上所述:采用引用和指针型引用,在传参时不会造成参数的副本,可以直接把传入的参数拿来用。而值传递会造成副本。
指针传递虽然可以改变外部目标的值,但是指针在传入函数是也会造成副本。所以传参时有引用就没有副本,没有引用就
会产生副本。我感觉效率比较:值传递<指针传递<引用传递<指针型引用。
以上内容仅供参考,欢迎交流!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值