为什么我不能通过它的指针访问这个结构?

时间:2010-02-02 14:18:17

标签: c pointers struct operators malloc

#include <stdio.h>
#include <stdlib.h>

typedef int element;

struct cell {
    element e;
    struct cell *p;
};
typedef struct cell* CELL;

int main() {
    CELL* p;
    p = (CELL*) malloc (sizeof(struct cell));
    p->e = 8;       /* This ain't working */
    *p.e = 8;       /* This doesn't help anything either */

    return 0;
}

我刚开始使用malloc而我刚刚创建了一个指向新创建的CELL的指针,它是一个struct。现在我正在尝试用一些值来填充它,但是在一个不是结构或联合的东西中,我对一个不友好的“成员e请求”表示欢迎。我确实指向了包含一个struct的{​​{1}}成员称为e,或者至少是我认为我做过的。为什么会失败?

5 个答案:

答案 0 :(得分:9)

我认为这很好地说明了一个好的C风格规则 - 不要创建隐藏事物是指针的事实的typedef。

答案 1 :(得分:6)

更改

cel* p;
p = (CELL*) malloc (sizeof(struct cell));

*p.e = 8;

struct cell* p; // or CELL p;
p = (CELL) malloc (sizeof(struct cell));

(*p).e = 8; // . has higher precedence than *

答案 2 :(得分:3)

由于typedef是指针类型,我认为你想把它作为CELL而不是CELL *。

答案 3 :(得分:1)

只是通过明确完成其他好的答案:

在代码中

,您将CELL类型定义为“指向struct cell的指针”。然后,您将局部变量p创建为CELL *,即“指向类型CELL的值的指针”。换句话说,指向指针的指针。这太过分了。 “->”运算符仅遵循一个间接级别,而不是两个级别。

答案 4 :(得分:0)

我解决了这个问题:

#include <stdio.h>
#include <stdlib.h>

typedef int element;

struct cell {
    element e;
    struct cell *p;
};
typedef struct cell* CELL;

int main() {
    CELL p;
    p = (CELL) malloc (sizeof(struct cell));
    p->e = 8;
    (*p).e = 8;

    return 0;
}

谢谢大家。