结构体类型定义是一条C语言语句,分号不能省略
结构体类型定义的一般形式:
struct 结构名
{
结构成员表;
};
例如:
struct birthday
{
int year,month,day;
};
其中,还可以结构体套结构体
struct student
{
int xuehao;
char name[30];
struct birthday; //结构体类型也可以是结构成员
int score[4];
double average;
};
注意:结构体中的数据类型并没有分配内存空间,只有在被使用到的时候才会分配存储空间
结构体类型变量的定义:
法1.先定义结构体类型,再说结构体类型变量
//接上面定义的 struct student
struct student s1;
scanf("%d",&s1.xuehao);
法2.两个在一条语句中实现
struct student
{
int xuehao;
char name[30];
struct birthday;
int score[4];
double average;
}s1,s2;//直接在这里声明结构体变量
结构体变量的初始化:在声明变量的同时给变量赋初值
赋值是整体进行的,所赋值类型必须对应,用逗号作间隔,若没有赋初值,则被系统赋值为0
struct student s1={202101,"zhangsan",{2003,04,12},{96,87,44}};
结构体变量的引用
1.整体引用,两个同类型间,s1 = s2;
注意:结构体变量被赋初值或声明后,不能再用表达式列表对结构体变量进行整体赋值
如 s1={202101,"zhangsan",{2003,04,12},{96,87,44}}; 是语法错误的
2.结构体成员变量引用:
结构体变量名.成员名 如:s1.xuehao
结构体数组:
struct student
{
int num;
char name[20];
};
struct student students[3]=
{
{202201,"1hao"}, //对应students[0]
{202202,"2hao"}, //对应students[1]
{202203,"3hao"} //对应students[2]
};//使用时与数组一样
结构体指针:
//定义结构体student类型的数组s, 单个student类型的变量s1,以及结构体类型的指针
struct student s[50],s1,*p;
//此时 p 还没有初始化,可以执行下面任一语句为p赋值
p = &s1; //将s1的首地址赋给p
p = s; //p指向数组s的第一个元素 s[0]
p =&s[0]; //p指向s[0]
此时访问结构体成员的方式有三种
1.s[0].成员名
2.(*p).成员名
3.p->成员名
//三种方式等价
"." 运算符优先级高于" * ",所以括号不能省略
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)