c++函数---待更新

函数

6.17

实参向形参的值传递就是在栈区创建一个跟实参相同的变量,但是位置不同,函数调用完毕后形参会被销毁。

 

第一行表示表示创建变量p1,第二行表示创建新变量承接p1,

  函数如果返回引用则不会创建新值,如果返回值,则返回的值与函数体语句中的变量不相同,会创建一个新的不同地址的变量进行返回。

     如下一段代码,

 当函数体语句为这样是 p2=20

第一次调用后p2.age=20,调用完毕返回了一个与p2值相同,地址不同的变量(拷贝p2形成的变量),之后每一次调用都会返回一个全新的变量,所以第二次调用的时候已经不是p2在调用函数了,而是被创造出来的与之前相同的变量(p3,p4,p5…)在调用函数了

   This是指向对象的指针,所以*this就是该对象。

当函数体语句如下时,返回p2

 每次调用完函数之后都会返回p2,所以p2一直连加,最终p2=40

1、函数值传递

值传递中的形参不会影响实参,形参是跟实参的值相同的变量,且形参的储存位置在栈区。

2、地址传递

 将实参的(&+变量名)地址传给函数,并用指针(数据类型+*+指针名)进行接收,此时不会在栈区创建新的变量,会改变实参。

void swap01(int *p1,int *p2)

{

    int temp=*p1;

    *p1=*p2;

    *p2=temp;

}

  int a = 10 , b=20;

swap01(& a , &b );//

  cout<<"a="<<a<<endl;

  cout<<"b="<<b<<endl;

3、引用???

该方法也会改变实参。同样也不会创造新的变量

 void swap02(int &p1,int &p2)

{

    int temp=p1;

    p1=p2;

    p2=temp;

}

int a = 10 , b=20;

swap02 ( a , b );//不写取址符

 cout<<"a="<<a<<endl;

cout<<"b="<<b<<endl;

4、数组函数调用

  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. using namespace std;
  5. void Read(int *a, int &len)//使用指针
  6. {
  7.   string str;
  8.   cin >> str;
  9.   int lens = str.size();
  10.   for (int i = 0; i < lens; i++)
  11.   {
  12.      a[i] = str[i] - 48;
  13.   }
  14.   len = lens;
  15.   reverse(a, a + len);
  16. }
  17. int a[500], a_len, b[500],  b_len, ans[501];
  18. int main()
  19. {
  20.   Read(a, a_len);//直接调用
  21.   for (int i = 0; i < a_len; i++)
  22.   {
  23.      cout << a[i];
  24.   }
  25.   return 0;
  26. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值