【发布时间】:2025-11-28 03:10:01
【问题描述】:
我试图理解这种情况下的指针转换。
# https://github.com/udp/json-parser/blob/master/json.c#L408
#define json_char char
typedef struct _json_object_entry
{
json_char * name;
unsigned int name_length;
struct _json_value * value;
} json_object_entry;
typedef struct _json_value
{
struct
{
unsigned int length;
json_object_entry * values;
#if defined(__cplusplus) && __cplusplus >= 201103L
decltype(values) begin () const
{ return values;
}
decltype(values) end () const
{ return values + length;
}
#endif
} object;
}
(*(json_char **) &top->u.object.values) += string_length + 1;
由于我看到top->u.object.values 具有值的第一个元素的地址(类型:json_object_entry),然后我们得到值的地址,将其转换为字符,.. 从这里我迷路了。我真的不明白这样做的目的。
// 注意:这是为那些想知道这是什么的人准备的两遍解析器。
谢谢
【问题讨论】:
-
也许它使用强制转换将值的更新限制为单个字节 (char),而不是任何值类型可以声明为 (int)...跨度>
-
强制转换为
char**,以便取消引用它(注意多余的外括号后面的第一个*)再次产生一个指针,尽管一个指向char。