指向地址时出错

时间:2014-09-14 10:02:34

标签: c pointers

我编写了一个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;
}

1 个答案:

答案 0 :(得分:1)

编译器抛出错误,因为编译器将&item1.n读取为(&item1).n,这是无意义的。因为是C语言,&运算符的优先级高于.

由于p是list *,你应该写:

item0.p = &item1;

因为n是结构的第一个元素,你也可以写(在C中,因为它不是有效的C ++而没有转换为void *item0.p = &(item1.n)但它是因为将指向int的指针指定给列表指针。

如果您以后想要同时打印两者,则打印item0.nitem0.p->n的值,因为它们都是整数。正如我上面写的那样,你可以写int i = *((int *) item0.p),但它是丑陋的。写这样的东西很快就会导致无法理解和无法维护的代码。