typedef struct LNode * list
表示定义了一个别名list
,list
代表 struct LNode *
类型的别名,它是一个指针类型。list a
,就是定义了一个struct LNode *
类型的变量a
。
而struct LNode
代表一个结构体类型。struct LNode a
代表定义了struct LNode
类型的变量a
。
其详细理解如下所示:
C语言
在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
语法特性,因此上面这种写法也是正确的。
今天的文章typedef struct LNode* list和struct LNode有什么区别?分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/31361.html