与C语法混淆(与指针和&符号有关)

时间:2016-02-04 02:09:33

标签: c pointers syntax ampersand

通过这个网站,http://c.learncodethehardway.org/book/ex17.html,我现在正在学习C编程,现在我正在努力理解那里写的代码。所以,我知道基本指针,以及与之相关的所有内容,至少我是这么认为的。

我从上面的URL中得到了这段代码(下面的代码已经简化了):

void Database_get(struct Connection *conn, int id)
{
    struct Address *addr = &conn->db->rows[id];
}

上述代码的右侧是{1}还是&(conn->db->rows[id])?从我看待它的方式来看,它意味着(&conn)->db->rows[id]。对不起,如果这是一个基本的东西。还在学习中。已经尝试过谷歌这个东西,似乎无法找到它。

提前致谢。

1 个答案:

答案 0 :(得分:4)

您正在寻找的概念是operator precedence。在C和C ++中,->[]的优先级高于&。此外,->[]具有从左到右的关联性,因此它们按此顺序解析:

&(((conn->db)->rows)[id])