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的值。
    总结:简单而言,第一种传递方式就相当于在另外的内存地址中改变了实参传递
    给形参的值。但这种改变由于值的单向传递未能传递到实参的地址中。而第二种方式中
    ,就相当于你直接进入了实参所在的内存地址中,你改变了地址中的值,所以实参的值自
    然改变啦!*/

  • 相关阅读:
    AI编辑SVG格式的相关问题
    HTML里的id等属性命名需要注意
    canvas绘图动画细节
    触控获取坐标判断滑动方向
    CSS3卡片旋转效果
    使用CURL下载远程文件保存到服务器
    微信JS-SDK应用DEMO
    布局转换:文档流->绝对定位
    ThinkPHP缓存微信公众号access_token
    JAVA JSP笔记
  • 原文地址:https://www.cnblogs.com/wangjingyuwhy/p/2940265.html
Copyright © 2011-2022 走看看