传参

参数传递:传值、传址、传引用

//主程序代码
  CString strUserId = "001";
  CString strUserName = "none";
  BOOL bFind = FindUserName(strUserId, strUserName);
  if( bFind )
  {
     MessageBox("User Name:" + strUserName);
  }
  else
  {
     MessageBox("No found!");
  }

//查找用户函数
  BOOL FindUserName(CString& strUserIdParam, CString& strUserNameParam)
  {
    if( strUserIdParam == "001" )
    {
      strUserNameParam = "aa";
      return TRUE;
    }
    return FALSE;
  }
这里用的是传引用,程序运行结果是:User Name:aa。传引用时,实参和形参是同一对象,形参相当于是别名,类似快捷方式。

如果把查找用户函数修改为:
  BOOL FindUserName(CString strUserIdParam, CString strUserNameParam)

则上面代码段的运行结果是:User Name:none。属于传值调用,形参和实参完全是不同的两个对象。内存会开辟一个临时变量复制了实参的值,函数中只是改变了临时变量的值,实参的值并未变化。

如果把查找用户函数修改为:
  BOOL FindUserName(CString *strUserIdParam, CString *strUserNameParam)

调用改为:FindUserName(&strUserId, &strUserName);

则程序的运行结果是:User Name:aa。属于传址调用。实参和形参是两个完全没有关系的指针变量,但指向同一块内存区域。因此改变其中任意一个,都会带来所有的改变。

综上可知,在作为参数传递时,指针和引用可以起到相同的效果。但指针和引用也存在这略微差别:

指针可以为NULL,但引用必须初始化,不能为NULL。

指针被初始化后,仍可以随意改变;但引用被初始化后,不能改变引用的关系。

如:int i = 5;
int j = 6;
int &k = i;
k = j; // k 和i 的值都变成了6;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值