开发者社区> 问答> 正文

redis源码解释

求大神帮忙解答一下下面代码的意义

typedef char *sds; 
struct sdshdr { 
    int len; 
    int free; 
    char buf[]; 
};  
static inline size_t sdslen(const sds s) { 
    struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr))); /*为什么可以这样?*/
    return sh->len; 
}

展开
收起
落地花开啦 2016-02-18 17:58:36 1969 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    sds指向sdshdr的buf,然后通过指针运算就能得到sdshdr的指针地址了。
    就是指针偏移了一个struct sdshdr的长度,指向了下一个struct sdshdr

    2019-07-17 18:44:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Redis集群演化的心路历程——从2.x到3.0时代 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载