• 传值和传地址


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

    //值传递
    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;
    }
    

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

  • 相关阅读:
    阿里云主机和RDS使用心得
    iOS_2_button控制物体形变
    js 继承概述
    Android 代码混淆
    “...”是字段,但此处被当作类型来使用
    Mali GPU OpenGL ES 应用性能优化--測试+定位+优化流程
    uva 213
    XML基础以及用DOM4j读取数据
    【Hibernate】Hibernate3.x独立执行时的Failed to load class &quot;org.slf4j.impl.StaticLoggerBinder&quot;错误
    《Pro Android Graphics》读书笔记之第六节
  • 原文地址:https://www.cnblogs.com/fynnn/p/14467052.html
Copyright © 2020-2023  润新知