我是 C 的新手,正在尝试编译这个简单的代码,但它不起作用,我也不确定为什么。谁能帮我?
int main(int argc, const char * argv[])
{
struct Node{
int value;
struct Node *next;
};
struct Node* x;
struct Node* y;
struct Node* z;
x = malloc(sizeof(Node));
y = malloc(sizeof(Node));
z = malloc(sizeof(Node));
return 0;
}
编译器抱怨使用undeclared identifier ‘Node’
:
x = malloc(sizeof(Node));
y = malloc(sizeof(Node));
z = malloc(sizeof(Node));
欢迎来到 SO 和 C 的精彩世界!
给你一些提示:
从语法上讲,在函数内定义结构没有问题,但通常在函数外部定义结构,以便可以在其他函数中使用。例如:
main(){
struct nodedef{vars};
add_to_node(node var);
}
add_to_node(node var)
{
// How can I add a to a node when I don't know what that is?
}
您的代码的主要问题是您稍后没有正确引用您的节点,如果我删除:
struct me {
int i;
};
然后每当我引用这种类型的结构时,我都必须再次明确地说struct
:
struct me myself;
myself = malloc(sizeof(struct me));
myself.i = 5;
避免重用 struct
关键字的方法是使用以下typedef
:
typedef struct me {
int i;
}m;
m myself;
myself = malloc(sizeof(m));
myself.i = 5;
最后一点是,任何时候你通过分配一些内存malloc()
确保你调用free()
来释放该内存:
free(myself);
否则会出现内存泄漏。
改用sizeof(struct Node)
。
使用struct Node
来指代结构。如果您希望上面的代码有效,另一种方法是将struct Node
结构typedef
为
typedef struct Node {
int value;
struct Node *next;
} Node;