结构体定义的基本格式如下 :
struct 结构体名
{
类型 数据类型成员名1
类型 数据类型成员名2
..... ................
};//注意最后的这个分号不可缺少
例如:
struct person
{
char name[];
int age;
};
上面的struct 是关键字 表示这是一个结构体类型 person表示结构体的名称
1个成员称为结构体类型的1个数据项 也有人称为分量
结构体和成员的命名规则与变量的命名规则相同
注意上面这段代码:仅仅是定义结构体类型 并未分配存储空间
定义结构体的3种方式:
第1种.先声明结构体 再定义结构体变量
如:
struct student
{
int num;
char name[12];
char sec;
float score;
};
struct student stu1,stu2;
上面这段代码 是先定义结构体 其中student 为结构体名
然后再定义结构体变量 stu1 stu2
其中stu1 和 stu2 是student 类型的结构体变量
第2种: 声明结构体类型的同时定义变量
格式如下:
struct 结构体名
{
成员类别;
.... ...
}变量名;
如:
struct student
{
int num;
char name[12];
char sec;
float score;
} stu1,stu2;
第3种: 直接定义结构体变量
格式如下:
struct
{
成员列表
........
}变量名;
如:
struct
{
int num;
char sex;
}stu1;
定义结构体数组:
定义结构体数组时,必须先定义结构体 然后再定义该类结构体的数组
如:
struct student
{
int num;
char name[12];
char sex;
};
struct student stu[40];
还可以使用下面这种方法:
struct student
{
int num;
char name[12];
char sex;
}stu[40];
结构体数组的初始化:
结构体数组的初始化 和其他类型的数组的初始化类似
struct student
{
int num;
char name[12];
char sex;
}stu[2]={{1001,"张三",'M',99}
{1002,"小美",'F',98}};
如果成员是一个数组类型的话 初始化如下
struct student
{
int num;
char name[12];
char sex;
float score[2];
}stu[2]={{1001,"张三",'M',99,97}
{1002,"小美",'F',98,69}};
结构体变量的初始化:
对结构体变量在定义时指定初始值 称为初始化
结构体的初始化和数组类似,都是按顺序赋初始值的,在
编译时按顺序将表达式中的值赋值给结构体变量中的成员
如:
struc student
{
int num;
char name[12];
char sex;
}stu1={1122,"张小强","M",89};
如果成员是一个数组类型的话 初始化如下
struc student
{
int num;
char name[12];
char sex;
float score[2];
}stu1={1122,"张小强","M",89,98};
注意:如果结构体变量的某个成员又是结构体,该成员的初始化
也是一个初值表:例如一个结构体的成员是另一个结构体
初始化如下:
//表示学生成绩
struct score
{
float math,English,computer; //定义了三个float类型的变量
};
//表示学生信息
struct student
{
int num;
char name[12];
char sex;
struct score stu_score; //注意这里stu_score是score类型
}stu={1001,"张晓华",'M',67,89,99};
结构体变量的引用:
引用结构体变量的格式:
结构体变量名.成员名
例如:stu.num 表示结构体变量stu的num成员
成员运算符‘.’在所有运算符中优先级最高
同其他普通变量一样 结构体变量的成员可以进行赋值 运算 和输出
例如:
stu.age++;//表示结构体变量stu的成员age做自增运算
stu.sex='M';//表示把M复制给结构体变量stu的成员sex
结构体引用的注意事项:
1. 不允许使用赋值语句将一组常量直接赋值给一个结构体变量。
例如:下面的赋值方法是错误的
stu ={1001,"张晓华",'M',67,89,99};
2.不能将一个结构体变量直接输入输出 只能对结构体的各个成员进行输入输出
例如:下面的做法是错误的:
scanf("%d,%s,%c,%d,%f",&stu);
printf("%d,%s,%c,%d,%f",stu);
正确的写法是:
scanf("%d",&stu.num);
printf("%d",stu.num)
还有一点要注意的就是:
结构体成员的地址和结构体变量的地址都可以被引用,
例如:
scanf("%f",stu.stu_score.math);
printf("%d",&stu);
两个相同类型的结构体变量可以相互赋值
例如:
struct student stu1,stu2;
stu1=stu2;
因为 stu1和 stu2 都是student类型的结构体变量 所以变量stu2可以整体赋值给stu1
以上内容 纯属本人拙见,请大家指点
|
|