我在C方面不是很好,但是我试图做一个包含带链表的数组的哈希表
但是我在这段代码中有错误:
function (&objectA.list) // Works
hashtable->tab[1]= &objectA; // I put my list into the array
function (hashtable->tab[1].list) // Doesnt work
错误:
请求非结构或联合的成员'list'
答案 0 :(得分:3)
两个代码片段没有做同样的事情:因为.
运算符具有更高的precedence(事实上,它具有所有运算符的最高优先级)表达式
&objectA.list
表示&{34} list
objectA
成员的地址。
您的第二个表达式采用objectA
的地址,然后尝试从中提取列表。那不是一回事。假设tab[1]
被正确输入以保存指针objectA
,为了使第二个表达式与第一个表达式一样,你需要写这个:
function (&(hashtable->tab[1]->list));
注意:虽然我为了清晰起见添加了括号,但它们不是必需的,因为->
运算符与点.
运算符具有相同的优先级。
答案 1 :(得分:0)
正如dasblinkenlight所说,你的第一行代码并不符合你的想法,因为.
比&
绑定得更紧密。您使用objectA.list
的地址,而不是访问.list
的{{1}}。
在你的最后一行代码中,由于你有一个指针,你想使用间接成员运算符,
&objectA
,而不是普通的成员运算符->
。换句话说,.
。
答案 2 :(得分:0)
如果将tab[1]
定义为指向结构的指针,则不能像使用
.
运算符
function (hashtable->tab[1].list)
改为使用->
或(*hashtable->tab[1]).list