#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,或者至少是我认为我做过的。为什么会失败?
答案 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;
}
谢谢大家。