结构体和结构体变量的区别
我们先来了解些结构体的定义和赋值:

1.结构体一般形式:
struct 结构体名
{成员列表};
2.定义结构体的方式
2.1定义结构体且先不定义结构体变量
struct Book
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
使用这种方法定义结构体在后面使用时需要用struct说明,这种定义方式较为繁琐,
struct Book book1;
2.2定义结构体同时定义结构体变量
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1, student2;
这样我们可以直接使用student1, student2这两个变量进行操作,但在定义新的变量时还是需要使用struct关键字进行说明。
struct student stutent3;
2.3使用typedef对变量进行重定义
typedef struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}Stu;
使用这种方式可以直接用Stu定义变量
Stu student1; //等同于struct student student1;
2.4直接定义结构体变量
struct
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1;
这种方式可以直接定义需要使用的结构体,但后续无法定义新的此结构体变量。
3.结构体的初始化
与其他变量相同,在定义变量时可对其赋值:
#include <stdio.h>
struct student
{
long int num;
char name[20];
char sex;
char addr[30];
}a = {89031, "Li Lin", 'M', "123 Beijing Road"};
void main()
{
printf("NO. : %ld\nname: %s\nsex: %c\naddress: %s\n", a.num, a.name, a.sex, a.addr);
4.结构体数组
上面结构体描述了一个学生的基本信息,但往往我们需要存储很多个学生的信息,我们可以使用结构体数组进行定义:
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
struct student stu[3]={{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
{10102,"Li Lin1", 'L', 18, 87.5, "103 Beijing Road"},
{10103,"Li Lin2", 's', 18, 87.5, "103 Beijing Road"}};
5.指向结构体变量的指针
#include <stdio.h>
typedef struct student
{
int a;
int b;
}STU;
void main()
{
STU student = { 5,10 };
printf("%d\n", student.a);
STU* stu1;//定义结构体指针
stu1 = &student;//令指针指向student结构体
stu1->a = 6;//使用指针直接修改student中a的值
printf("%d", student.a);
}
这里需要注意的是成员运算符"."和指向关系符(->)的区别;
成员运算符常用于引用结构体成员:
struct student
{
int num;
int age;
}student1;
student.num = 13;
指向运算符常用于结构体变量指针
struct student
{
int num;
int age;
}student1;
struct student* stu;
stu = student1;//指向结构体student1
stu->num = 13;
成员运算符"."和指向关系符(->)的关系等同:
stu->num = 13; == (*stu).num = 13;

浙公网安备 33010602011771号