结构体类型不同的定义方法和区别

最近几个月在备考专升本,未来半年以内应该都不会更新java有关的内容了(专升本不考这个,且没时间学别的了),未来主要会更新C语言,数据结构(C语言版),数据库这三个.

更新这篇文章原因是,在我学到数据结构定义一个链表的时候没看懂,重新翻看了C语言的书也是没看懂这些代码,又询问了哈工大的学长,专升本的同学,老师,才搞明白:结构体变量的定义和初始化有很多种方法,而且他们有细微的差别,是我之前没了解到了,下面我按照typedef的有无,来简述一下两种结构体定义的区别和写法:

第一种:普通方法

创建结构体并给结构体取别名为Boy,利用Boy类型新定义一个lao_wang变量

	//创建结构体并给结构体取别名为Boy,利用Boy类型新定义一个lao_wang变量
	typedef  struct boy
	{
		int age;
		int telephone[11];
	}Boy;
	Boy lao_wang;

上面的代码定义了一种struct boy类型,然后用typedef 给其起一个别名 Boy .

并且定义了一个这种类型的变量。

注意:如果没有 typedef , 每次定义结构体变量,变量名前要加 struct boy.

这种写法相当于:

struct boy
{
	int age;
	int telephone[11];
};
typedef struct boy Boy;

和第一种写法的区别是:这种写法是先定义结构体类型,后为结构体类型取别名,而第一种写法是定义结构体类型和取别名是同时进行的.

第二种:没有typedef,且不为结构体设置别名 的方法(也是我之前主要疑惑的点)

	struct boy
	{
		int age;
		int telephone[11];
	}lao_wang;

 需要注意的是,这里的lao_wang和第一种定义方法中起别名的位置相同,但是,在这种方法中,lao_wang并不是这个结构体boy的别名,而是利用struct boy新建的一个变量,是一个变量哦.

这个写法相当于:

	struct boy
	{
		int age;
		int telephone[11];
	};
	struct boy lao_wang;

因为没有 typedef , 所以每次定义结构体变量,变量名前要加 struct boy.

那么,回到我们最开始研究的问题:数据结构里单链表的定义和表示:

	typedef struct node
	{
		int age;
		struct node* next;
	}Node, * Linklist;// 等价于 struct node , struct node *

	typedef struct node
	{
		int age;
		struct node* next;
	}Node;
	typedef Node* Linklist;

上面代码块中的 Linklist 是什么意思呢?

其实就相当于给 Node *(struct node) 起了一个别名。给指向 Node 结构体的指针重新起了一个新的小名。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值