【发布时间】:2016-03-28 13:56:05
【问题描述】:
我是 C 的新手,作为一个(经典)练习,我试图在链表上实现一些操作。不过,我还没有走得太远......当我尝试如下声明和初始化根节点时:
#include <stdlib.h>
struct intNode_t {
int data;
struct intNode_t* next;
};
int main() {
struct intNode_t* root = ( intNode_t* ) malloc( sizeof( struct intNode_t ) );
return 0;
}
编译器 (clang) 在我试图将 malloc 返回的 void 指针类型转换为指向 intNode_t 的指针的地方给出错误“使用未声明的标识符”。我意识到这是一个菜鸟问题,但我在其他地方找不到答案。有什么建议吗?
【问题讨论】:
-
您在 main 函数中将类型名称
struct intNode_t拼写了两次。为什么您对拼写不同的名称intNode_t的行为不同感到惊讶? -
注意:
struct intNode_t*和intNode_t*不是一回事。至少在 C 语言中不会。只要去掉那种类型转换,你就会让很多人(包括你自己)开心。 -
谁告诉你应该转换
malloc的结果?请立即停止听那个人说话,因为他们将成为您学习 C 的主要障碍。 -
你忘记了 struct 之后 main 之前的分号
-
@NiH:因为存在从 void 指针到任何对象指针的隐式转换。看我的回答。 “被告知”的东西是非常危险的,因为 90% 的程序员都是糟糕的程序员,所以通过随机倾听,你很有可能抄袭坏人。