b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c 链表的定义和使用 cjson 源码阅读笔记(3)

电脑杂谈  发布时间:2017-12-31 09:23:46  来源:网络整理

有了内存管理,我们就可以得到一些列不同类型的节点了。

然后我们通过节点操作就可以把这些节点连接起来,组成一棵树。

是的,所有的json 都可以理解为一颗有根树。

而节点操作有把加点 a 添加为节点 b 的儿子, 把节点 b 从节点 a 的儿子中删除。

或者修改节点 a 的值或者查询节点 a 的值。

对,就是传说中的 增删改查 。

添加儿子节点有两种情况,一种是给 object 增加儿子, 一种是给 array 增加儿子。

object 和 array 相比, 仅仅多了一个操作 ,即设置 key .

所以我们可以再 object 中设置完 key 之后再调用 给 array 添加儿子的操作来实现给 object 添加儿子。

具体参考胆码。c 链表的定义和使用

/* Utility for array list handling. */
static void suffix_object(cJSON *prev,cJSON *item) {
    //两个兄弟的指针互相指向对方
    prev->next=item; 
    item->prev=prev;
}
/* Add item to array/object. */
void   cJSON_AddItemToArray(cJSON *array, cJSON *item) {
    cJSON *c=array->child;
    if (!item) return;
    if (!c) {
        array->child=item; //之前没有儿子,直接添加
    } else {
        while (c && c->next) c=c->next; // 先找到最后一个儿子。
        suffix_object(c,item); // 添加儿子, c 是 item 的兄弟
    }
}
void   cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item) {
    if (!item) return;
    if (item->string) cJSON_free(item->string);//这个 儿子之前有key, 先清理了。  
    item->string=cJSON_strdup(string); // 设置 key
    cJSON_AddItemToArray(object,item); // 添加儿子
}

c 链表的定义和使用_链表作用_c  如何使用单向链表

实际上上面这两个操作即可满足我们的添加需求了。

但是 cjson 为了我们更方便的使用添加节点的操作, 它又封装了一些操作, 当然使用宏定义封装的。

比如我们平常给 object 增加一个 false 儿子需要这样

cJSON_AddItemToObject(object, name, cJSON_CreateFalse())

现在我们只需要这样

cJSON_AddFalseToObject(object,name)

具体实现方式就是定义一个宏。

而且 cjson 只定义了对象的添加,而没有对数组定义这个宏。

大概原因是那时候, 一般一个数组内的元素的类型都是相同的吧, 不像对象这么灵活。

/* Macros for creating things quickly. */
#define cJSON_AddNullToObject(object,name)      cJSON_AddItemToObject(object, name, cJSON_CreateNull())
#define cJSON_AddTrueToObject(object,name)      cJSON_AddItemToObject(object, name, cJSON_CreateTrue())
#define cJSON_AddFalseToObject(object,name)     cJSON_AddItemToObject(object, name, cJSON_CreateFalse())
#define cJSON_AddBoolToObject(object,name,b)    cJSON_AddItemToObject(object, name, cJSON_CreateBool(b))
#define cJSON_AddNumberToObject(object,name,n)  cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n))
#define cJSON_AddStringToObject(object,name,s)  cJSON_AddItemToObject(object, name, cJSON_CreateString(s))


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-57098-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...