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;
    }
    

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

  • 相关阅读:
    上行带宽和下行带宽是什么意思?各有什么作用?
    Windows下安装OpenSSL及其使用
    openssl的证书格式转换
    科普:TLS、SSL、HTTPS以及证书(转)
    ELK日志分析平台搭建全过程
    【周末学习】五格货栈的互联网思维:如何不花一分钱实现...
    励志语录
    highstock K线图 深入研究
    关于highstock横坐标的一些的一些说明(1)使用UTC时间
    HighCharts/Highstock使用小结,使用汉化及中文帮助文档
  • 原文地址:https://www.cnblogs.com/fynnn/p/14467052.html
Copyright © 2011-2022 走看看