结构体:
结构体是一些值的集合,这些值被称为成员变量。结构体的每个成员可以是不同类型的变量;
结构体类型的定义:
struct 结构体类型名
{
类型1 成员1;
类型2 成员2;
..............
类型n 成员n;
};
其中,struct是定义结构体类型的关键字,“结构体类型名”是用户自定义的结构体类型的名称。花括号里包括若干个变量,称为结构体类型的成员。每一个成员都有一个名字和相应的数据类型,用于描述对象的属性,各成员的类型任意。可以相同,也可以不同。右大括号必须以分号结束,作为结构体类型定义的结束标志。定义完成后,“struct结构体类型名”代表一种新的数据类型。
如:
struct Date
{
int year;
int month;
int day;
};
注意:结构体类型的定义仅仅声明了一种新的数据类型,并未定义变量,因此编译器不会为其分配内存空间,正如不会为int和char等基本数据类型分配内存空间一样。
用typedef为结构体类型起别名
如:
typedef struct Date
{
int year;
int month;
int day;
}Date;
别名可直接表示该结构体类型。因此,下面两条语句等价,都可用于定义结构体类型变量,但第二种形式更简洁。
struct Student stu1,stu2;
STU stu1,stu2;
结构体类型的嵌套
如:
struct Date
{
int year=0;
int month=0;
int day=0;
};
struct Student
{
int ID;
char name[20];
struct Date birthday;//已定义的结构体
char sex;
double Score;
};
结构体变量的定义
语法:
struct 结构体类型名
{
类型1 成员1;
类型2 成员2;
..............
类型n 成员n;
}变量名;
如:
struct Date
{
int year=0;
int month=0;
int day=0;
}day2;
结构体变量的赋值
定义时直接赋值;
定以后赋值;
如:
struct Date
{
int year=0;
int month=0;
int day=0;
};
struct Student
{
int ID;
char name[20];
struct Date birthday;
char sex[10];
double Score;
};
int main()
{
Date day1 = { 1999,1,1 };
Student zhang = { 1999,"zhang",{1999,1,1},"man",100 };
return 0;
}
结构体指针
结构体指针是指基类型为结构体的指针,即可指向结构体变量的指针,其定义方式如下:
语法:
结构体类型名 *指针
如:
struct Student *p;
Date *p;
q=&date1;
C语言还提供了箭头运算符:“->”访问结构体的成员。
如:
q->year;//等价于day1.year//
#include<stdio.h>
typedef struct Stu
{
char name[20];
int age;
char sex[10];
char xuehao[20];
}Stu;
void print1(Stu temp)
{
printf("%s\n",temp.name);
printf("%d\n",temp.age);
printf("%s\n",temp.sex);
printf("%s\n",temp.xuehao);
}
void print2(Stu* qq)
{
printf("%s\n", qq->name);
printf("%d\n", qq->age);
printf("%s\n", qq->sex);
printf("%s\n", qq->xuehao);
}
int main()
{
Stu s1 = { "张三",20,"男","20220411" };
print1(s1);
print2(&s1);//更优
return 0;
}
以上两种方法中,用结构体指针'->'更优;