黑马程序员技术交流社区

标题: 结构体总结 [打印本页]

作者: yuan121    时间: 2015-9-8 23:16
标题: 结构体总结
定义格式:
struct 结构体名{
   
    成员列表;   //格式: 类型 变量名;
   
};

//-----------------结构体变量
结构体变量特点:
一个复合类型,具备结构体的特性
struct Stu{
    int age;
}stu1,stu2;


//匿名结构体
struct{
    int model;
}s1; //


//先定义结构体,后定义变量
struct Stu stu3;


//------------------结构体变量中成员的访问方法

结构变量名.成员名

点语法
boy1.num             boy1的学号
boy2.sex             boy2的性别
boy1.birthday.month  boy1的生日的月份


//--------------------初始化结构体变量
初始化的时候,注意成员的顺序

1)定义的同时进行初始化
struct Stu{
    int age;
    char name[20];
    char *name2;
}stu1={23,"sss","xxx"};


2)定义结构体变量的同时初始化
struct Stu{
    int age;
    char name[20];
    char *name2;
}; //以上仅仅只是定义了结构体类型,还没有定义结构体变量

//定义结构体变量
struct Stu stu2 = {23,"sss","xxx"};

3)定义结构体类型同时定义结构体变量后初始化
struct Stu{
    int age;
    char name[20];
    char *name2;
}stu3;

stu3 = {23,"sss","xxx"};  //错误的

1.连续初始化
stu3 = (struct Stu){23,"sss","xxx"}; //正确


2.逐个初始化
stu3.age = 1;
strcpy(stu3.name,"xxx");   //为什么要使用strcpy这个方法,直接赋值可以吗?
stu3.name2 = "xxx";
//--------------------------------------------------

区分一个细节:
struct Stu{
    char name[20];        //字符串数组
    char *name2;          //字符串指针
}stu1;

stu1.name = "xxx" ;             //错误的
strcpy(stu1.name,"xxx");        //正确的  通过strcpy方法
stu1.name2 = "xxx"              //正确

//定义同时进行初始化  严格遵守定义顺序


//部分初始化
struct Stu{
    int age;
    char name[20];
};
方式一:struct Stu boy1={.name="weige"};
方式二:struct Stu boy1;
boy1.age = 10;


//-------------------结构体的数组
定义:由相同类型的结构体变量组成的有序的集合。

//----定义格式:
1) 定义结构体的同时定义结构体数组
struct Car{
    int lunzi;
    int speed;
}cars[5];

2) 使用匿名结构体定义数组
struct {
    int lunzi;
    int speed;
}cars[5];

3)先定义结构体类型,再定义结构体数组
struct Car{
    int lunzi;
    int speed;
};
struct Car cars[5];





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2