结构体的通俗讲解1(结构体的声明,访问)

 

结构体声明

emmmm  一般我们可以看到 

struct(Structure type)后面跟上它的成员,所有可选成员数量大于等于2个(一个的话使用int,char类型的变量,数组什么的就足以完成功能)

代码1没有提供变量列表,没有创建任何变量,可以在结构体下一条加上struct student stu1的方式创建变量。

代码2则是提供变量列表并创建stu1变量

//代码1
struct student
{
	long num;
	float score;
	struct student *next;
};


//代码2

struct student
{
	long num;
	float score;
	struct student *next;
}stu1;


//代码3
typedef struct student
{
	long num;
	float score;
	struct student *next;
}STUDENT;

STUDENT stu11;

 

 

 

成员可以使用数组,变量,指针(也算变量,单独拎出来)。以上述代码为例, student是标签(tag),struct student就是自定义的一个类型说明符(和c语言中的 int , float一样),和成员列表联系起来了(类似int和整型的联系)。

我们可以使用typedef(typedef是用来为复杂的声明定义简单的别名)创建一个新的类型,如代码3,和代码1代码2结构标签的效果是一样的,但是这个时候STUDENT现在是一个类型名了,而不是结构标签,所以可以后续

STUDENT *Time;

 

这样更加省事地创建变量,而不用费力地写 

 

struct student *Time;

 

提高代码简洁性。当然我们可以把代码3用更简洁地方式写出来,这也是后面链表,树,栈的常用写法,这里的struct student和STUDENT可以看做等价,struct student* 和STDENT*可以看做等价,其中Time是指向该结构体的指针。

 

typedef struct student
{
	long num;
	float score;
	struct student *next;
}STUDENT,*Time;

 

这里有一个问题,既然可以视作等价的,为什么上述代码不能写如下2种(创建失败,系统报错)

 
typedef struct student
{
	long num;
	float score;
	STUDENT *next;
}STUDENT,*Time;

///

typedef struct student
{
	long num;
	float score;
	Time next;
}STUDENT,*Time;

 


原因就是自引用的顺序问题,STUDENT,Time是直到声明的末尾才定义的,在结构声明的内部尚未定义。

 

 

 

结构体的成员与访问

结构体的成员可以包括其他所有数据类型(所有在结构体外部声明的变量都可以放到结构体里面),于此同时,在结构体内部的成员名字可以与外部的一样,在内部命名 float score ,在结构外面也可以有 float score ,这不会产生冲突。

以开头的代码为例子,这个里面的成员访问包括间接访问和直接访问,直接访问是利用点操作符(.)来进行的,是自左向右结合的,代码如下

struct student
{
	long num;
	float score;
	struct student *next;
}stu1;

 

想要访问num,使用 stu1.num就可以选择了结构体中的num。

 

同时点操作符也是可以嵌套的,访问结构体中的结构体的元素(结构体里可以放结构体),例如(xxx.xx).xx 这种形式

间接访问和后续内容在下一篇总结

 

 

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值