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

Confusion with C syntax (relating to pointer and 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];
}

上面代码右边是&(conn->db->rows[id])还是(&conn)->db->rows[id]?从我的角度来看,它意味着 &(conn->db->rows[id])。对不起,如果这是一个基本的东西。还在学习中。已经尝试 Google 这个东西,似乎找不到它。

提前致谢。

您要查找的概念是 operator precedence。在 C 和 C++ 中,->[] 的优先级高于 &。而且,->[] 具有从左到右的结合性,因此它们按以下顺序解析:

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