十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
将不同类型变量封装在一起。(本质是一种数据类型)
方法一:
先定义结构体类型,再定义结构体变量
struct Student(结构体类型名) //定义结构体类型
{
int num;
int name[20];
//成员列表
};
Student lucy={20,"lucy"}; //定义结构体类型的变量 +初始化
lucy.name="bob";//错误,name是字符数组变量名,不带这样赋值的
改为:strcpy(lucy.name,"bob");
方法二:
定义类型的同时定义结构体变量
#include
//memset的头文件 struct Student(结构体类型名)
{
int num;
int name[20];
//成员列表
}lucy;
Student bob;
memset(&bob,0,sizeof(bob)); //初始化为零,清空结构体
补充:void *memset(void *dst,void *val,void *size) :
将地址从dst开始,长度为size的所有字节赋值为 val
方法三:
定义一次性结构体类型
struct //无结构体类型名,无法在外定义结构体类型变量
{
int num;
int name[20];
//成员列表
}lucy;
*注意:
Student lucy={100,"lucy"};
Student bob;
方法一:逐个成员赋值
bob.num=lucy.num;
strcpy(lucy.name,bob.name);
方法二:直接赋值(推荐)
bob=lucy;
方法三:内存拷贝
memcpy(&bob,&lucy,sizeof(Student));
三、结构体嵌套结构体四、结构体数组struct Ob
{
int year;
int month;
int day;
};
struct Student
{
int num;
int name[20];
int Ob;
}lucy;
cout<
本质是数组 ,存的是结构体变量
Student arr[2]={{100,"lucy"},{20,"bob"}};
cout< 五、结构体指针变量
本质是变量,存的是结构体变量的地址
Student lucy={100,"lucy"};
Student *p=&lucy;
cout<< p->num<
cout<< (&lucy)->num<
结构体用 . 访问成员,地址可以用->访问成员
六、结构体数组元素的指针变量本质是指针变量,保存结构体数组元素的地址
Student arr[2];
cout
cout<<(arr+1)->num;
七、结构体指针成员 1.结构体变量在堆区,结构体指针成员指向文字常量区2.结构体变量在堆区,结构体的指针成员也指向堆区struct Stu
{
int num;char *name;
}
Stu jack={20,"hello"}; //jack.name只保存了“hello”的首地址,指向文字常量区,"hello"存在文字常量区内
若要jack.name指向堆区
#include
jack.name=new char[20];
strcpy(jack.name,"hello");
delete [] lucy.name;
八、结构体拷贝 1、结构体浅拷贝struct Stu
{
int num;char *name;
}
Stu *p=new Stu;
p->name=new char[20];
p->num=100;
strcpy(p->name,"hello");
delete [] p->name; //先释放成员指向
delete p; //再释放结构体变量
将结构体变量空间内容 复制一份到 另一个相同类型的结构体变量空间中
*注意:如果结构体中有指针成员,则会带来多次释放堆区空间的问题
lucy.name 和 bob.name都指向同一堆区空间,释放 lucy.name 后又释放 bob.name 就会造成堆区空间重复释放。
2、结构体深拷贝Student lucy={100,"lucy"};
Student bob;
bob=lucy;
给结构体指针成员单独开辟空间
九、结构体对其规则n) Student lucy={100,"lucy"};
Student bob;
bob.num=lucy.num;
bob.name=new char[20];
strcpy(bob.name,lucy.name);
以空间换时间
1.确定分配单位 (一行分配多少个字节)
结构体中大的基本类型长度决定
如果用#pragma pack(n)强制对齐,则分配单位为 min(大的基本类型长度,n)
2.确定成员偏移量
成员偏移量=成员自身类型的整数倍
3.收尾工作
结构体的总大小=分配单位的整数倍
十、结构体的位域以 位 为单位的成员,叫位段/位域
用于节约空间、位操作、嵌入式等
struct packed_data
{
unsigned int a:2;
unsigned int b:6;
}data;
(本身a、b、c各占一个字节,共3字节,但相邻位域可压缩,合在一起共8位刚好1字节)
(定义了两个没有赋予意义的位段,并不是不合法)
案例:
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧