我试图理解一行C代码,其中包括使用指向struct value的指针(也是指向某个东西的指针)。
// Given
typedef struct {
uint8 *output
uint32 bottom
} myType;
myType *e;
// Then at some point:
*e->output++ = (uint8) (e->bottom >> 24);
来源:http://tools.ietf.org/html/rfc6386#page-22
答案 0 :(得分:3)
“那段C代码究竟做了什么?”
浪费大量时间不得不仔细阅读,而不是一目了然。如果我正在对此进行代码审查,我会将其反馈给作者,并将其分解为两行。
它做的两件事是在e->输出处保存一些东西,然后将e->输出提前到下一个字节。我想如果你需要用两个部分描述代码,它应该是两行,有两个单独的语句。
答案 1 :(得分:1)
正如Deduplicator在上面的评论中指出的那样,查看operator precedence table可能有所帮助。
*e->output++ = ...
表示"将值...
分配给e->output
指向的位置,然后让e->output
指向新的位置8位(因为output
的类型为uint8
)。 (uint8) (e->bottom >> 24)
以获取...
答案 2 :(得分:1)
该行
*e->output++ = (uint8) (e->bottom >> 24);
执行以下操作:
bottom
指向的结构的字段e
。uint8_t
,现在包含高位字节。output
。它是指向uint8_t
。uint8_t
存储到output
指向的地址。output
添加1,使其指向下一个uint8_t
。只要结果,某些事情的顺序可能会重新排列 行为好像他们已按此顺序完成。运算符优先级是完全的 将问题与执行操作的顺序区分开来,而不是真的 相关的。