C结构指针出错

时间:2015-10-31 20:07:31

标签: c

我在C方面不是很好,但是我试图做一个包含带链表的数组的哈希表

但是我在这段代码中有错误:

function (&objectA.list) // Works
hashtable->tab[1]= &objectA; // I put my list into the array 
function (hashtable->tab[1].list) // Doesnt work

错误:

  

请求非结构或联合的成员'list'

3 个答案:

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