68 结构体-结构体做函数参数。为什么值传递中子函数和主函数的输出不一样,但是地址传递中子函数和主函数的输出是一样的呢?

问题描述:

根据下列代码和结果回答下列问题。

代码:

// Created by 黑马程序员.
#include "iostream"
using namespace std;
//学生结构体定义
//学生结构体定义
struct student
{
    //成员列表
    string name;  //姓名
    int age;      //年龄
    int score;    //分数
};

//值传递
void printStudent(student stu )
{
    stu.age = 128;
    cout << "子函数中 姓名:" << stu.name << " 年龄: " << stu.age  << " 分数:" << stu.score << endl;
}

//地址传递
void printStudent2(student *stu)
{
    stu->age = 128;
    cout << "子函数中 姓名:" << stu->name << " 年龄: " << stu->age  << " 分数:" << stu->score << endl;
}

int main() {
    system("chcp 65001");

    student stu = { "张三",18,100};
    //值传递
    printStudent(stu);
    cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl;

    cout << endl;

    //地址传递
    printStudent2(&stu);
    cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age  << " 分数:" << stu.score << endl;

    system("pause");

    return 0;
}

结果:

D:\CLion_code\cmake-build-debug\CLion_code.exe
Active code page: 65001
子函数中 姓名:张三 年龄: 128 分数:100
主函数中 姓名:张三 年龄: 18 分数:100

子函数中 姓名:张三 年龄: 128 分数:100
主函数中 姓名:张三 年龄: 128 分数:100
Press any key to continue . . . 

 为什么值传递中子函数和主函数的输出不一样,但是地址传递中子函数和主函数的输出是一样的呢?

问题解答:

在 C++ 中,值传递和地址传递的行为有显著区别,正是这导致了你观察到的输出差异。

值传递

printStudent 函数中,参数 stu 是以值传递的方式传递的。这意味着在调用函数时,会创建一个 stu 的副本。在函数内部对 stu.age 的修改不会影响原来的 stu,因此主函数中的 stu.age 保持不变。输出结果显示:

  • 子函数中:年龄:128
  • 主函数中:年龄:18

地址传递

printStudent2 函数中,参数是一个指向 student 结构体的指针(student *stu),即地址传递。这意味着在调用函数时,传递的是原始对象的地址。在函数内部对 stu->age 的修改会直接影响到主函数中的 stu 对象。输出结果显示:

  • 子函数中:年龄:128
  • 主函数中:年龄:128

总结

因此,值传递只改变了副本的内容,而地址传递直接修改了原始对象的内容,这就是为什么你在两种情况下看到不同的输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神笔馬良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值