这几天都在为了学习数据结构准备,刷了一些题 但都比较简单,就没有发每日一题了~
结构体的定义和结构变量的定义
这个比较简单就看书就好,这里介绍我看到的比较新颖的结构变量定义.
利用宏定义使用一个符号变量来表示一个结构类型和定义结构变量
#define STU struct student
STU
{
int num;
char name[20];
};
STU stu1,stu2;
同一个结构体的变量与变量之间可以进行赋值的操作,注意要对一个结构体变量进行输入输出等操作的时候需要使用"."这个运算符,也就是点,比如 stu1.num就是第一个"人"的学号,stu2.name就是第二个"人"的名字,其实就看作一个普通的int变量/char数组就可以了
结构数组的定义和引用
结构数组其实就是一个数组,其中每个元素都是一个结构体的变量而已,
指向结构变量的指针
也就是结构指针变量,实质上就是指向一个结构体中的变量的指针,只是这个变量是一个结构体类型的变量,也就是stu1和stu2这样的,这个指针中的地址是这个结构变量的首地址,问题是结构变量的首地址是什么,在哪儿?或者换个问题,一个结构体变量中的各个变量数组的地址是否是连续的?即stu1和stu2中定义的num和name[20]是否连续储存,是否有规则的分配空间?
结构指针变量的定义:struct student *p
注意:结构体指针只能进行如下指向(赋值)p=&stu1,而不能有p=&student和p=&stu1.num的赋值方式.
有了结构指针变量,可以方便的访问结构变量中的每个元素,如(*p).num或者p->num与stu1.num等价
注意:"."优先级高于"*"所以括号不可少,且我们更在面对这种指针时习惯用p->num.
结构变量与函数参数
我们可以用结构变量的成员作为作为参数,如void print(struct student s),但这时跟普通变量的函数一样,属于值传递,我们可以用两种方式来避免值传递的缺陷
方法一
在函数中定义一个相同结构体的变量,最后返回这个结构体变量就可以
方法二
也就是使用指针,void print(struct student *p)
复杂结构体
结构体中定义结构体的知识就不再赘述,这里为了后续链表的学习主要缕一缕结构体的自我引用
struct student
{
int num;
char name[20];
struct student *link;
};