我正在学习C低谷this tutorial,我偶然发现了这段代码:
int args_assigned =
sscanf(input_buffer->buffer, "insert %d %s %s",
&(statement->row_to_insert.id),
statement->row_to_insert.username,
statement->row_to_insert.email);
困扰我的部分是&(statement->row_to_insert.id)
:
我知道它正在创建一个指向id的指针(在本例中为unit32
),但为什么它被parens包围?它们是为了什么?
我为这个微不足道的问题道歉,但我无法找到有关这种特定语法的文档,因为我不知道如何调用它。
答案 0 :(得分:8)
这可能只是为了可读性。 &(statement->row_to_insert.id)
相当于&statement->row_to_insert.id
,因为C运算符->
中的运算符优先级和.
的优先级高于&
。您可以阅读更多here。
答案 1 :(得分:0)
我想补充一下smbear的答案,并说当我们处于运营商优先级时,我们不能省略运算符'结合性。
正如您所看到的,括号放在statement->row_to_insert.id
左右,这是因为结构运算符->
和.
具有相同的优先级,但关联性Left-To-Right
。
这意味着statement->row_to_insert.id
按以下顺序进行评估 - 选择row_to_insert
statement
成员,然后选择id
成员row_to_insert
。