zoukankan      html  css  js  c++  java
  • C/C++语言中的函数参数传参三种对比

    学了很长时间C/C++有时指针方面还是有点乱。

    希望大神发现如果下面有不对的地方请指出。我发现之所以我乱就是因为中文表述不准确的问题,比如 ,地址值和地址

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    void swap1(string* str1,string* str2){// 1.对象指针作为函数参数 //影响实参
        cout<<&str1<<" "<<&str2<<endl;//打印地址值
        string temp = *str1;    *str1=*str2;    *str2=temp;
        cout<<"str1="<<*str1<<"	str2="<<*str2<<endl;//打印值
    }
    
    void swap2(string &str1,string &str2){//2.引用作为函数参数 //影响实参 形参和实参是同一个对象 传引用是不开辟内存空间的 所以比传指针好其实传的就是实参本身
        cout<<&str1<<" "<<&str2<<endl;//打印地址值
        string temp = str1;    str1=str2;    str2=temp;
        cout<<"str1="<<str1<<"	 str2="<<str2<<endl;//打印值
    }
    
    void swap3(string str1,string str2){//3.对象作为函数参数 //传的是值 不影响实参
        cout<<&str1<<" "<<&str2<<endl;//打印地址值
        string temp = str1;    str1=str2;    str2=temp;
        cout<<"str1="<<str1<<"	str2="<<str2<<endl;//打印值
    }
    
    void main(){
        string str1("现在"); string str2("过去");//值存在常量池 
    
        cout<<&str1<<" "<<&str2<<endl;//地址和调用swap1打印的地址不一样 
        swap1(&str1,&str2);//使用传 地址值 的方式传递str1和str2的地址值 &取地址(自我感觉:传的是栈空间指向常量区的地址)
    //------------------------------------
        //cout<<&str1<<" "<<&str2<<endl;//地址和调用swap2打印的地址一样,说明就是同一个对象
        //swap2(str1,str2);(自我感觉:传的栈空间的地址值)
    //------------------------------------
        //cout<<&str1<<" "<<&str2<<endl;//地址和调用swap3打印的地址不一样
        //swap3(str1,str2);(自我感觉:传的是常量区的值)
    }
  • 相关阅读:
    05_面向对象基础篇_02-构造方法、匿名对象、对象比较、this关键字
    Android Studio 生成 注入的插件
    Android 手机端自动化测试框架
    性能测试该怎么做
    移动端自动化openatx开源项目介绍,pytest并发测试框架结合
    Appium 并发多进程基于 Pytest框架
    Appium 并发测试基于unitest
    Appium 使用小结
    Pandas 命令整理
    Locust 测试结果通过Matplotlib生成趋势图
  • 原文地址:https://www.cnblogs.com/zakers/p/4853237.html
Copyright © 2011-2022 走看看