新人求解关于结构体的问题

渌水一洲 2019-03-04 09:39:15
typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; 这里的最后一行的的LNode是这个结构体的别名吗?还有*LinkList的含义是什么(是struct LNode *LinkList还是 struct *LinkList)这个要怎么使用啊?
...全文
152 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
AlbertS 2019-03-05
  • 打赏
  • 举报
回复
引用 3 楼 @风轻云淡_ 的回复:
上面第一句说错了,LinkList是struct LNode* 的别名,在定义时为了区分 LNode和LNode*,定义时加*区分。
lin5161678 2019-03-04
  • 打赏
  • 举报
回复
struct LNode{
ElemType data;
struct LNode *next;
}
是一个数据类型 语法上 你可以把这一坨东西当成一个类型 比如 int
int n,*p, foo();
表示声明 一个int类型的变量n 一个int*类型的变量 p 一个返回值类型是int的函数foo 同样可以把int 直接替换

struct LNode{
ElemType data;
struct LNode *next;
}n,*p, foo();
表示声明 一个struct LNode类型的变量n 一个struct LNode*类型的变量 p 一个返回值类型是struct LNode的函数foo 然后在声明前面加typedef 意思是 原先声明变量 现在声明类型别名 没了
L_Aster 2019-03-04
  • 打赏
  • 举报
回复
LNode L;和struct LNode L;是一样的,struct LNode *p;和LinkList p;是一样的
@风轻云淡_ 2019-03-04
  • 打赏
  • 举报
回复
上面第一句说错了,LinkList是struct LNode* 的别名,在定义时为了区分 LNode和LNode*,定义时加*区分。
@风轻云淡_ 2019-03-04
  • 打赏
  • 举报
回复
先回答你的问题,LNode就是struct LNode 的别名,*LinkList是struct LNode* 的别名,使用的时候 想定义结构体对象 LNode A;想定义结构体指针 LinkList B;

关于struct的别名,我稍作解释一下:正常struct定义的时候,可以不加typedef关键字,在早期C语言里面的时候,各处机制还没有那么的健全,定义完struct在使用的时候必须要struct关键字;如下:struct LNode mNode;是可以的 LNode mNode;这样是错误的,于是为了方便,都会在struct 前面加一个别名,而且一般会在原名前面加一个下划线用以区分,一来更加直观,二来不用加struct关键字更加方便。C++兼容了C的基础上更加人性化,在C++里面,不需要加struct也可以直接使用定义的结构体,此外,用别名声明指针更加的简短方便,于是就沿袭下来了。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧