C语言链表typedef结构体指针别名及node返回值函数相关疑问
你提问涉及的代码格式化后如下:
struct LinkedList{ int data; struct LinkedList *next; }; typedef struct LinkedList *node; //1 node createNode(){ //2 node temp; temp = (node)malloc(sizeof(struct LinkedList)); temp->next = NULL; return temp; }
问题1解答
typedef是C语言中用于给已存在的类型定义别名的关键字,标注//1的语句作用就是:给struct LinkedList *这个「指向LinkedList结构体的指针类型」定义一个别名node。- 之后写代码时,凡是需要声明该结构体指针变量的位置,都可以用
node代替完整的类型声明:比如原来要写struct LinkedList *new_node;,现在直接写node new_node;即可,简化代码的同时语义也更直观。 - 补充说明:这种给指针直接定义别名的写法存在一定争议,容易让阅读代码的人忽略
node本质是指针类型,实际开发中可以按需选择使用。
问题2解答
- 你提到的「C语言结构体不能包含函数作为成员」是完全正确的语法规则,C语言的结构体确实不支持定义成员函数(该特性是C++才引入的),但这里的
createNode根本不属于结构体的成员函数,它只是一个普通的全局函数,和结构体没有绑定从属关系,所以完全不违反C的语法要求。 - 这类函数只是功能上专门用于操作对应结构体(这里是创建、初始化LinkedList节点),是C语言中模拟封装逻辑的常用写法:把结构体和操作该结构体的相关函数放在同一模块内维护,本质上函数还是独立于结构体存在的,自然可以正常声明和调用。
内容的提问来源于stack exchange,提问作者Mihir Sanjay
相关产品推荐
相关产品推荐

