zoukankan      html  css  js  c++  java
  • 传值和传地址

    作用:利用指针作函数参数,可以修改实参的值
    示例:

    //值传递
    void swap1(int a ,int b)
    {
    	int temp = a;
    	a = b; 
    	b = temp;
    }
    //地址传递
    void swap2(int * p1, int *p2)
    {
    	int temp = *p1;
    	*p1 = *p2;
    	*p2 = temp;
    }
    
    int main() {
    
    	int a = 10;
    	int b = 20;
    	swap1(a, b); // 值传递不会改变实参,输出10,20
    
    	swap2(&a, &b); //地址传递会改变实参,输出20,10
    
    	cout << "a = " << a << endl;
    
    	cout << "b = " << b << endl;
    
    	system("pause");
    
    	return 0;
    }
    

    总结:如果不想修改实参,就用值传递,如果想修改实参,就用地址传递

    结构体做函数参数

    作用:将结构体作为参数向函数中传递

    传递方式有两种:

    • 值传递
    • 地址传递

    示例:

    //学生结构体定义
    struct student
    {
    	//成员列表
    	string name;  //姓名
    	int age;      //年龄
    	int score;    //分数
    };
    //打印学生信息函数
    //值传递
    void printStudent(student stu )
    {
    	stu.age = 28;
    	cout << "子函数中 姓名:" << stu.name << " 年龄: " << stu.age  << " 分数:" << stu.score << endl;//值传递用.
    }
    
    //地址传递
    void printStudent2(student *stu)
    {
    	stu->age = 28;
    	cout << "子函数中 姓名:" << stu->name << " 年龄: " << stu->age  << " 分数:" << stu->score << endl;//地址传递用->
    }
    
    int main() {
    
    	student stu = { "张三",18,100};
    	//值传递
    	printStudent(stu);//张三,28,100
    	cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl;//张三,18,100
    
    	cout << endl;
    
    	//地址传递
    	printStudent2(&stu);//张三,28,100
    	cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age  << " 分数:" << stu.score << endl;//张三,28,100
    
    	system("pause");
    
    	return 0;
    }
    

    总结:如果不想修改主函数中的数据,用值传递,反之用地址传递
    值传递时形参改变但实参不变

  • 相关阅读:
    WCF HelpPage 和自动根据头返回JSON XML
    Jquery及插件 应用
    Autofac Mvc Webapi注入笔记
    TransactionScope 出错 与基础事务管理器的通信失败
    工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)
    Asp.net的异步处理模型Asp.net的异步如何提高服务器的吞吐量
    WCF 契约定义命名空间 的疑问
    常用的18个人情世故
    StatusCode
    web标准常见问题集合
  • 原文地址:https://www.cnblogs.com/fynnn/p/14467052.html
Copyright © 2011-2022 走看看