zoukankan      html  css  js  c++  java
  • 回答结果(结构体变量的传递)

    #include "stdio.h"
    struct student
    {    
     int x; 
     char c;
    }a;
    void f1(struct student b);
    void f2(struct student *b);
    void main(void)
    {
     a.x=3; 
     a.c='a';  
     f1(a);
     printf("%d,%c\n", a.x, a.c);  
     f2(&a); 
     printf("%d,%c\n", a.x, a.c);
    }
    void f1(struct student b)
    {   
     b.x=20;
     b.c='y';
    }
    void f2(struct student *b)
    {
        b->x = 20;
     b->c = 'y';
    }
    /*1.为什么结构体变量作形参时,其成员的值不会变?这是因为在函数调用中,
    值的传递是单向的。就拿本题说,在f1函数中,系统为b.x和b.c在内存的动
    态存储区中开辟了临时的存储区(但开辟的地址和a.x和a.c的地址不同),
    函数调用完成后b.x和b.c的存储区即被释放。由于值的传递是单向的。所以
    ,b.x和b.c的值的改变并未引起a.x和a.c的改变。当程序执行完毕后,a.x
    和a.c所占用的内存才被释放。
    2.为什么结构体变量的地址作形参时,其成员的值会
    变? 拿本题说,你把这个地址传给形参后,你在执行函数时f2时,你相当于直接进
    入了a.x和a.c在内存中的区域,所以你的操作就是直接在修改a.x和a.c的值。
    总结:简单而言,第一种传递方式就相当于在另外的内存地址中改变了实参传递
    给形参的值。但这种改变由于值的单向传递未能传递到实参的地址中。而第二种方式中
    ,就相当于你直接进入了实参所在的内存地址中,你改变了地址中的值,所以实参的值自
    然改变啦!*/

  • 相关阅读:
    bzoj4196: [Noi2015]软件包管理器
    bzoj3992: [SDOI2015]序列统计
    bzoj 4178: A
    Spoj 8372 Triple Sums
    hdu contest day1 1007 Tricks Device
    hdu contest day1 1002 Assignment
    2018暑期生活指导第三周
    2018暑期生活指导第二周
    《大道至简》阅读笔记
    2018暑期生活指导第一周
  • 原文地址:https://www.cnblogs.com/wangjingyuwhy/p/2940265.html
Copyright © 2011-2022 走看看