C:为什么围绕指针的parens?

时间:2018-05-15 07:54:28

标签: c

我正在学习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包围?它们是为了什么?

我为这个微不足道的问题道歉,但我无法找到有关这种特定语法的文档,因为我不知道如何调用它。

2 个答案:

答案 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