目录
#什么是结构体
结构体是一种由我们自己定义的_数据类型_ (比如说与int类型,char类型 )
结构体变量是数据类型为我们定义的结构体类型的变量(先定义结构体类型在定义结构体变量)
#结构体及结构体变量的定义和使用
##结构体的定义##
struct 结构体名
{
成员1;//(形如)int a;
成员2;
...
}; //分号结尾
注意:1.结构体类型只是规定构成这种数据类型的模型,系统编译时不分配内存空间(占据内存的是变量),所以不能对结构体类型取数据或者赋值(就像你会给int赋值吗?)。
2.成员数据类型可以不同。
3. 定义位置会影响使用位置。
4.声明类型时不能给成员赋初值。
##结构体变量的定义和使用
法1:分开定义,先声明后定义
法2:同时定义
法3:与2类似,省略结构体名(只能定义一次,不能再定义结构体变量了)
##访问规则
1.普通变量“.”访问成员(形如结构体变量.成员名)
2.结构体指针变量用“->”访问成员
##赋初值的方法
struct student
{
int h;
int w;
float rate;
};
struct student tom={168,50,18.0};
单独赋值:
tom.h=168;
结构体类型中有数组时:
struct student
{
int n;
int book[5];//书籍被借阅次数
float ave;
};
struct student tom={5,{10,21},15.5};
struct student tom={5,10,21,15.5};//15.5赋给的变量不同前者给ave,后者给book[2];
#typedef使用
* 相当于给类型取小名,原来的类型名仍能使用(类型已经存在)
* 对结构体的运用
typedef int TYPE;
TYPE a;//等价于int a;
typedef struct student
{
int a;
int b;
}STU;//STU是struct sudent的别名;
STU tom;//等价于struct student tom;
#结构体数组
## 语法:struct 结构体名 数组名[数组长度];(类型名 数组名[长度])
typedef struct student
{
int a;
int b;
}STU;//STU是struct sudent的别名;
int a[36];
STU class[36];//与其他类型数组的定义是相似的
#结构体内存计算
内存对齐原则:
1.当前元素对于结构体首字节的偏移量必须是本身所占字节的整数倍。
2.结构体所占字节数是最大元素所占字节整数倍。
#指针与结构体
1.结构体指针变量的定义:
struct stu
{ int num;
char name[20];
int ave;
};
struct stu *p=&stu;
---先给指针赋初值,此后指针指向结构体变量的起始地址;
2.通过指针访问结构体成员
1.)(*p).num=101;
2.) p->num=101;
3.结构体数组指针的使用