A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 舒少勇 中级黑马   /  2015-3-19 10:09  /  1133 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

结构体定义的基本格式如下 :


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


以上内容 纯属本人拙见,请大家指点




2 个回复

倒序浏览
很详细了 ,我感觉结构体就是类 ,可以这样理解吧
回复 使用道具 举报
落花有意 发表于 2015-3-19 10:15
很详细了 ,我感觉结构体就是类 ,可以这样理解吧

恩 可以
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马