我编写了一个c程序来创建一个简单的链表,当我尝试将struct变量的指针等同于下一个地址时,编译器会抛出错误。你能帮我解决一下吗?说int*
无法转换为list
。这是代码片段:
struct list
{
int n;
struct list *p;
};
void main()
{
struct list item0, item1;
item0.n=1;
item0.p=&item1.n;//The compiler is throwing an error here. Says they are two incompatible types
item1.n=2;
item1.p=NULL;
}
答案 0 :(得分:1)
编译器抛出错误,因为编译器将&item1.n
读取为(&item1).n
,这是无意义的。因为是C语言,&
运算符的优先级高于.
。
由于p是list *
,你应该写:
item0.p = &item1;
因为n是结构的第一个元素,你也可以写(在C中,因为它不是有效的C ++而没有转换为void *
)item0.p = &(item1.n)
但它是坏因为将指向int的指针指定给列表指针。
如果您以后想要同时打印两者,则打印item0.n
和item0.p->n
的值,因为它们都是整数。正如我上面写的那样,你可以写int i = *((int *) item0.p)
,但它是丑陋的。写这样的东西很快就会导致无法理解和无法维护的代码。