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

  typedef struct LNode * list表示定义了一个别名listlist代表 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

  1. 如果没有typedefINT 就是一个int类型变量,STRUCTNAMEstruct StructName 类型变量。

  2. 加了 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语法特性,因此上面这种写法也是正确的。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值