typedef struct LNode *list和struct LNode有什么区别

Imready575 2018-05-23 08:13:50
有没有大佬帮解答一下
...全文
3277 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2018-06-19
  • 打赏
  • 举报
回复 2
C 语言中:
struct StructName
是一个完整的类型名。就像:
int
一样,区别是 struct 是自定义类型,而 int 是内置类型。所以声明的时候写法也是类似的:
int n;
struct StructName dummy;
但是 C 语言同样提供一个 typedef 关键字,可以给已有类型(包括内置和自定义类型)定义别名:
typedef int INT;
typedef struct StructName STRUCTNAME;
注意看上面的结构,其实和声明变量一样的,只是在前面加一个 typedef。 如果没有 typedef,INT 就是一个 int 类型变量,STRUCTNAME 是 struct StructName 类型变量。 加了 typedef 则“变量名”就变身“类型名”,而“类型名”代表的类型正是加 typedef 之前“变量名”对应的类型。 根据上述逻辑,也可以定义对应的指针类型:
typedef int *PINT;
typedef struct StructName *PSTRUCTNAME;
定义了这些别名之后,你就可以这样用:
INT n;
STRUCTNAME dummy;
PINT pn;
PSTRUCTNAME pdummy;
等价于:
int n;
struct StructName dummy;
int *pn;
struct StructName *pdummy;
C++ 语言: C++ 中引入了类,关键字为 class,它是 struct 的增强版本。声明一个类:
class ClassName {
private:
	int n;
public:
	void setValue(int n);
	int getValue();
};
当声明这个类的对象时,这样书写:
ClassName className;
而不需要像 struct 一样写成这样:
class ClassName className;
但是,在 C++ 中,把 class 换成 struct 一样可以编译:
struct StructName {
private:
	int n;
public:
	void setValue(int n);
	int getValue();
};
声明这个“struct”的对象时,可以这样书写:
StructName structName;
而不需要像在 C 语言中一样写成这样:
struct StructName structName;
但是由于 C++ 兼容绝大多数 C 语法特性,因此上面这种写法也是正确的。
自信男孩 2018-05-25
  • 打赏
  • 举报
回复 1
引用 3 楼 a34140974 的回复:
[quote=引用 2 楼 cfjtaishan 的回复:] typedef是给类型别名,
typedef struct LNode * list;
这条语句就是将struct LNode *可以用list代替。当然struct LNode也是可以定义指针的。 但是也是有区别的。 比如如下:
list a, b;
struct LNode *a, b;
第一条语句定义了2个指针变量,第二条语句定义了一个指针变量,一个结构体普通变量; 这就是为什么用宏定义和typedef的一个区别吧
实际上是有区别的,别的不说,struct LNode在旧版C中,类型是struct LNode,因此你不能像这么定义一个变量LNode a;(正确的是struct LNode a;),所以会有typdef这种写法。现在的C具体怎样需要实测一下。但较新的c++里面,为了方便,两种写法最终都可以使用LNode a;这种定义方式[/quote] 注意其别名和把别名定义成结构体名不是一个概念。别名可以定义成很多不同的名字。 楼主没提是什么环境下,新版的C也不支持LNode a这样的定义。
月凉西厢 2018-05-25
  • 打赏
  • 举报
回复
引用 2 楼 cfjtaishan 的回复:
typedef是给类型别名,
typedef struct LNode * list;
这条语句就是将struct LNode *可以用list代替。当然struct LNode也是可以定义指针的。 但是也是有区别的。 比如如下:
list a, b;
struct LNode *a, b;
第一条语句定义了2个指针变量,第二条语句定义了一个指针变量,一个结构体普通变量; 这就是为什么用宏定义和typedef的一个区别吧
实际上是有区别的,别的不说,struct LNode在旧版C中,类型是struct LNode,因此你不能像这么定义一个变量LNode a;(正确的是struct LNode a;),所以会有typdef这种写法。现在的C具体怎样需要实测一下。但较新的c++里面,为了方便,两种写法最终都可以使用LNode a;这种定义方式
自信男孩 2018-05-24
  • 打赏
  • 举报
回复
typedef是给类型别名,
typedef struct LNode * list;
这条语句就是将struct LNode *可以用list代替。当然struct LNode也是可以定义指针的。 但是也是有区别的。 比如如下:
list a, b;
struct LNode *a, b;
第一条语句定义了2个指针变量,第二条语句定义了一个指针变量,一个结构体普通变量; 这就是为什么用宏定义和typedef的一个区别吧
lizh1009 2018-05-23
  • 打赏
  • 举报
回复 1
typedef struct LNode *list表示定义了一个别名list,list代表 struct LNode *类型的别名,它是一个指针类型。list a,就代表定义了一个struct LNode *类型的变量a。 而struct LNode代表一个结构体类型。struct LNode a代表定义了struct LNode类型的变量a。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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