一个 C 语言结构体问题(链表相关)

2020-03-17 18:02:37 +08:00
 writerG
代码如下:
typedef struct LNode{
ElemType data; //节点的数据域
struct LNode *next; //节点的指针域
}LNode,*LinkList;


Status InitList(LinkList &L){
L= (LinkList)malloc(sizeof(LNode)); //生成新节点作为头结点,用头指针 L 指向头结点
L->next = NULL; //头结点的指针域置空
return OK;
}

这个 LinkList 是啥啊,这个 typedef 的用法,我也有点儿看不懂了。。。是把这个结构体命名为 LNode 和*LinkList 了??
1376 次点击
所在节点    问与答
8 条回复
BiteTheDust
2020-03-17 18:28:39 +08:00
建议别看了 我也看不懂
lcdtyph
2020-03-17 18:35:27 +08:00
LinkList 就是 struct LNode *
这个 typedef 拆开就好看了

定义一个指针:
typedef int *pint;
int a = 3;
pint pa = &a;
writerG
2020-03-17 18:48:10 +08:00
@lcdtyph

那个初始化的函数呢。。
参数是 LinkList &L
这是啥意思啊?
lcdtyph
2020-03-17 18:50:36 +08:00
@writerG
这是 C++的引用
Jirajine
2020-03-17 19:19:33 +08:00
typedef 就是把组合了一堆东西的 declarator“封装”成一个“单词”(type name)直接当做一个新的 type 使用。
C/C++的 declarator 那一套规则很恶心,完全无法理解其组合方向、优先顺序的设计到底是什么理念。
ipwx
2020-03-17 19:28:32 +08:00
先学会 C 的类型声明,比如:

int a; // a 是 一个整型
int *a; // a 是 一个指向整型的指针
int *a[1024]; // a 是一个 1024 个指向整型的指针的数组
int (*f)(int,int); // f 是一个指向 int(int,int) 函数的指针
char* (*g)(char*); // g 是一个指向 char*(char*) 函数的指针

然后 typedef 你直接套进去,定义出来的变量和上面每一行一一等价。

typedef int A; A a;
typedef int* A; A a;
typedef int* A[1024]; A a;
typedef int (*F)(int, int); F f;
typedef char* (*G)(char*); G g;

最后,typedef struct { ... } YYY; 等价于:

struct XXX { ... }
typedef struct XXX YYY;

只不过就是省略了一个 struct XXX 的中间别名。
season4675
2020-03-17 19:55:39 +08:00
有引用,这个是 C++不是 C……本来想多说点的,上面都回答了……
msg7086
2020-03-18 06:08:10 +08:00
刚想说这是 C++不是 C,结果上面都说了……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/653634

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX