一、定义
C 数组允许定义可存储相同类型数据项的变量
结构是 C 编程中另一种用户自定义的可用的数据类型
它允许存储不同类型的数据项。
结构体:是一种数据类型,是我们根据自己的需要构造出来的数据类型,它是由若干个数据项组合而成的复杂数据类型,这些数据项称为该结构类型的成员。
定义一个结构:
格式:
struct 结构体名
{
datatype 变量名1;
datatype 变量名2;
....
};
//datatype是c语言中有效的数据类型,如:int,char,float
例:
struct student
{
int num; =>数据类型, int char 一样的用
char name[20];
char sex;
float score;//数据成员
};
注:
1.定义结构并不分配空间,它仅仅是个数据类型
2.通常位我们把结构的定义放在include的后面,如果是多文件的话会放在头文件中去(.h)
3.其中{}后面有分号;
4.结构体类型名与它的成员名可以同名。
例:
struct test
{
int test;
};
5.结构体成员名与其他变量名相同也可以
6.结构体类型名称是"struct 结构体名" ,注意struct 关键字不能省略
7.结构体可以嵌套,即结构体里数据类型也可以是一个结构体类型,但是不能是自身的结构体类型
struct birthday
{
int year;
int month;
int day;
};
struct student
{
int num;
char name[20];
struct birthday bd;
};
struct student
{
int num;
struct student stu2; X
};
定义结构体变量
1.先定义结构体类型,再定义结构体变量
例:
struct student
{
int num;
char name[20];
float score;
};
struct student stu1,stu2; //定义了stu1,stu2 2个变量
2.在定义结构体类型的同时定义结构变量、
例:
struct student
{
int num;
char name[20]
}stu1,stu2;
struct student stu3;
3.直接定义结构体变量
struct //无名结构体
{
int num;
char name[20];
}stu1,stu2;
表示结构体变量成员的一般形式: 结构体变量.成员名
例:
struct data
{
int year;
int month;
int day;
};
struct man
{
char name[20];
struct data weding_date;
};
struct man man1,man2;
访问该结构体变量成员;
man2.weding_date.year 一级一级访问。
man2.name
给结构体变量赋值:
1.结构体变量的初始化:定义结构体变量的同时给它赋值
int a[5]={1,2,3,4,5};
struct student student1={1,"xxxx",'m',90};
形式一:
struct 结构体名
{
类型 成员名;
...
};
struct 结构体名 结构体变量={初始化数据}
例:
struct student
{
int num;
char name[20];
float score;
};
struct student stu1={1,"xxx",90};
形式二:
struct 结构体名
{
类型 成员名;
...
}结构体变量名={初始化数据};
struct student
{
int num;
char name[20];
float score;
}stu1={1,"xxx",90};
初始化的时候是否可以给成员变量的值不赋全?
可以,但不推荐如此
结构体变量的引用规则:
1.除了在定义变量的时候整体访问,引用的时候,不能整体访问,只能通过“变量名.成员名”的方式访问。除了情况2:
#include
//自定义的数据类型
struct student
{
char name[20];
char sex;
int age;
float score;
};
//用自定义的数据类型定义变量stu1并初始化
struct student stu1={"xxx",'m',1,90};
void main()
{
printf("%s %c %d %f\n",stu1);
}
2.
#include
//自定义的数据类型
struct student
{
char name[20];
char sex;
int age;
float score;
};
//用自定义的数据类型定义变量stu1并初始化
void main()
{
struct student stu1={"xxx",'w',1,90},stu2;
stu2=stu1;
stu2={"vvv",'m',2,89}; X
if(stu1==stu2) X
printf("%s %c %d %.2f\n",stu2.name,stu2.sex,stu2.age,stu2.score);
}
------------------------------------------------------------------------------
int a; int* p=&a; *p<=> a
int a[5]; int (*p)[5]=&a;
struct student a; struct student *p=&a; *p==a
结构体指针变量:
一个专门用来指向一个结构体变量的指针。
指向一个结构体变量的指针的值是这个结构体变量的首地址。
结构体指针变量定义的一般形式:
struct 结构体名 *p;
通过结构体指针访问该结构体变量的成员,一般形式:
结构体变量.成员名<=>(*结构体指针变量).成员名<=>
结构体指针变量->成员名
例:
结构数组:元素为结构体类型的数组
结构体数组定义的3中方式
形式一:
struct student
{
int num;
char sex;
int age;
};
struct student stu[2]; <=>int a[5]
形式二:
struct student
{
int num;
char sex;
int age;
}stu[30];
形式三:
struct
{
int num;
char sex;
int age;
}stu[30];
结构体数组初始化
struct student
{
int num;
char sex;
int age;
};
struct student stu[]={100,'m',12,102,'w',13};
struct student stu[]={{100,'m',12},{102,'w',13}};
结构体数组的引用:
引用方式:
结构体数组名[下标号].成员名
例: stu[0].num=102; 给第一个学生的学号赋值
结构体作为函数的参数:
1.可以将结构体变量的成员的值作为参数传递给函数处理
2.将整个结构体变量作为函数的参数传递
3.可以将指向一个结构体变量的指针作为参数传递
网友评论