zoukankan      html  css  js  c++  java
  • 结构体指针传参与返回值

    结构体指针



    结构体指针大家想必都非常清楚,我们也一直强调传参的时候使用结构体指针(占用4字节),减少对栈的压力。
    但是今天看linux的标准io时候。发现了localtime时间函数 返回值是一个结构体指针。当时有点懵逼了,开始觉得这样就不对。{当然肯定是我想多了}


          为什么会觉得不对那?因为它是个子函数,返回一个局部变量的地址显然是没有价值的。函数调用完就被释放了呀。你在用指针承接也没有价值,完全是野指针啊。百度了一下还真的有人在么做,结果出现了问题。但是其实我的想法是错误的。人家大神怎么可能犯这种错误!突然想到了malloc。人家肯定是用了malloc来分配了空间。就是你的子函数调用完,这块malloc申请的空间也不会释放,除非free。(至于为什么。这源于他们分配空间的地方不同。改天反汇编贴出让大家看看)。那就ok了吗?当然没完。它什么时候释放那?我也不知道啊。在学习了内核源码,看看他的本质吧!

    ocaltime函数
    将时间数值变换成本地时间,考虑到本地时区和夏令时标志;
    原型: struct tm *localtime(const time_t * calptr);
    头文件 <time.h>
     返回值:
    成功: struct tm *结构体, 原型如下:
    struct tm {
    int tm_sec; /* 秒 – 取值区间为[0,59] */
    int tm_min; /* 分 - 取值区间为[0,59] */
    int tm_hour; /* 时 - 取值区间为[0,23] */
    int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
    int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
    int tm_year; /* 年份,其值等于实际年份减去1900 */
    int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一 */
    int tm_yday; /* 从每年1月1日开始的天数– 取值区间[0,365],其中0代表1月1日 */
    int tm_isdst; /* 夏令时标识符,夏令时tm_isdst为正;不实行夏令时tm_isdst为0 */
    };
    此结构体空间由内核自动分配, 而且不要去释放它.
    失败: NULL

    结构体局部变量传参的错误



    truct fenshu
    {
    int fenzi;
    int fenmu;
    };
    fenshu* add(fenshu* a,fenshu*b)
    {
    fenshu *s;
    s->fenmu=a->fenmu*b->fenmu;
    s->fenzi=a->fenmu*b->fenzi+a->fenzi*b->fenmu;
    return s;


    };
    fenshu * mul(fenshu* a,fenshu*b)
    {
    fenshu* s;
    s->fenmu=a->fenmu*b->fenmu;
    s->fenzi=a->fenzi*b->fenzi;
    return s;
    }
    2016年10月14日12:24:06 张飞online

  • 相关阅读:
    利用本地浏览器远程服务器上的jupyter notebook
    解决IIS服务器Web访问提示输入密码
    IIS 配置
    override new 关键字的区别
    ASP.NET的网站的设计与优化
    山东人!
    远程连接SQL Server 2000服务器的解决方案
    对软件的新认识
    一个程序员成长的六个阶段
    优秀程序员应当具备的品质
  • 原文地址:https://www.cnblogs.com/zhangfeionline/p/5959932.html
Copyright © 2011-2022 走看看