结构体-创新互联
定义:
struct Student{
//学生学号
int sno;
//学生名称
char name[20];
//学生年龄
int age;
//学生成绩
float score;
};
//注意:
结构体定义完成以后,计算机并不会给结构体分配内存空间
会在定义结构体变量后,分配存储空间
//结构体变量定义格式:
struct 结构体名 结构体变量名;
struct Student stu1;
2)定义结构体的同时,定义结构体变量
格式:
struct 结构体名{
}结构体变量1,结构体变量2...;
3)使用匿名结构体定义结构体变量
struct{
}结构体变量1,结构体变量2....;
结构变量名.成员名
分享名称:结构体-创新互联
分享链接:http://ybzwz.com/article/depech.html
结构(structure) 或叫 结构体
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、微信小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了景泰免费建站欢迎大家使用!"结构"是一种构造类型,它是由若干"成员"组成的,每一个成员可以是一个基本数据类型或者又是一个构造类型.
结构既是一种"构造"而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它,如同在说明和调用函数之前要先定义函数一样
为什么要有结构体?
结构体可以把功能相同的数据组织起来,存在一起,用得时候方便.而且在调用函数时,若传递参数较多,传一个结构体相对而言简单一些,很多系统自带的函数必须用结构体
定义结构体的方法
定义一个结构的一般形式为: struct 结构名{ 成员列表 }; 例: 定义一个学生的结构 struct stu{ int num; char name[10]; //char *name; };结构体变量的定义有三种方法
1)先定义结构体,然后在定义结构体变量struct Student{
//学生学号
int sno;
//学生名称
char name[20];
//学生年龄
int age;
//学生成绩
float score;
};
//注意:
结构体定义完成以后,计算机并不会给结构体分配内存空间
会在定义结构体变量后,分配存储空间
//结构体变量定义格式:
struct 结构体名 结构体变量名;
struct Student stu1;
2)定义结构体的同时,定义结构体变量
格式:
struct 结构体名{
}结构体变量1,结构体变量2...;
3)使用匿名结构体定义结构体变量
struct{
}结构体变量1,结构体变量2....;
结构体变量中成员的访问
形式:结构变量名.成员名
结构体变量初始化
struct Student{ int sno; char name[21]; int age; float score; }; 初始化: 1): struct Student str; str.sno=1; str.name="abc" //这种方式是错误的 strcpy(str.name,"abc"); str.score = 59.99f 2): 定义结构体变量的同时,进行初始化 初始化值的顺序要和定义结构体的顺序一致 struct Student stu2 ={8,"哈哈",2,4.5f} 问题: 1.stu1.name 占用多少个字节 printf("%d ",sizeof(stu1.name)); //21 2.stub.name 字符串长度是多少 printf("%ld",strlen(stu1.name)); //9 //汉字的编码问题 //utf-8 xcode中默认的中文的编码是utf-8 ,国际通用编码, 一个汉子占用3个字节 //GB2312 GBK 国标 一个汉字占用2个字节结构体存储原理
结构体占用的内存空间是每个成员占用的字节数之和(考虑对齐问题);
结构体大小的计算方法和步骤
1)将结构体内所有数据成员的长度相加,记为sum_a; 2)将各数据成员为了内存对齐,按各自对齐模数而填充的字节数累加到和sum_a上,记为sum_b。对齐模数是#pragma pack 指定的数值以及该数据成员自身长度中数值较小者.该数据相对起始位置应该是对齐模式的整数倍 3)将和sum_b向结构体模数对齐,该模数是#pragma pac指定的数值和结构体内部大的基本数据类型成员长度中数值较小者.结构体的长度应该是该模数的整数倍 所谓"对齐在N上" ,指定是"存放起始地址%N=0" struct A{ int a; //4 char b; //分配4个,用了1个,剩下3个 short c; //需要2个 }; printf("%ld ",sizeof(stuct A)); //上面的话是书上的 // 1)找对齐模数 // 对齐模数: 是结构体中的基本数据类型中占用字节数大的那个 // 2)在计算结构体变量中各个成员占用的字节和枚举也是一种结构体
枚举: 枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解任何基本类型 格式: enum 枚举类型{枚举值1,枚举值2....} 枚举变量的值: 枚举类型定义完成以后,系统会自动给枚举的每个元素都会赋值一个整形的初值 初值:从第一个元素开始,值为0,后面元素的值是其上一个元素值+1;分享名称:结构体-创新互联
分享链接:http://ybzwz.com/article/depech.html