定义结构体
// c++11可以为结构体提供默认值,如下:
struct Person {
char name[50] ="小六子";
int age= 22;
double weight = 70.5;
char sex = 'x';
bool normal = false;
};
struct Person person;
cout << "name = "<<person.name<<" age ="<<person.age<<" weight="<<person.weight<<" sex ="<<person.sex<<" normal ="<<person.normal;
创建结构体变量
struct Person per1;
// 创建的同时初始化
struct Person per2 = {"张三", 33, 60, 'f', true};
struct Person per3 = {0}; // 全部的成员将被设置为0
还可以在定义结构体时,创建结构体变量
struct Person {
char name[50];
int age;
double weight;
char sex;
bool normal;
} per{"张三", 33, 60, 'f', true};
结构体内存对齐
修改结构体内存对齐的参数
#pragma pack(1) 1表示没有间隙,即和结构体的成员大小总和保持一致
清空结构体
创建的结构体如果么有初始化,成员中有垃圾值,可以用memset或者bzero把结构体中全部成员清零。
struct Person per1;
memset(&per1, 0, sizeof(struct Person));
bzero(&per1, sizeof(struct Person));
复制结构体
- 使用memcpy
- 直接使用=
int main() {
struct Person {
char name[50];
int age;
double weight;
char sex;
bool normal;
} person{"张三", 33, 60, 'f', true};
struct Person per1;
memset(&per1, 0, sizeof(struct Person));
per1 = person;
cout << "name = "<<per1.name<<" age ="<<per1.age<<" weight="<<per1.weight<<" sex ="<<per1.sex<<" normal ="<<per1.normal<< endl;
return 0;
}
结构体指针做数组参数
#include <iostream>
#include<string>
using namespace std;
struct Person {
char name[50];
int age;
double weight;
char sex;
bool normal;
} person{"张三", 33, 60, 'f', true};
void show(struct Person * p) {
cout << "name = "<<p->name<<" age ="<<p->age<<" weight="<<p->weight<<" sex ="<<p->sex<<" normal ="<<p->normal<< endl;
}
int main() {
show(&person);
return 0;
}
结构体数组
#include <iostream>
#include<string>
#include <cstring>
using namespace std;
struct Person {
char name[50];
int age;
};
int main() {
struct Person pers[2];
memset(pers, 0, sizeof(pers));
strcpy(pers[0].name, "李四");
pers[0].age = 33;
strcpy(pers[1].name, "张三");
pers[1].age = 15;
for (size_t i = 0; i < 2; i++)
{
cout <<"name:"<<pers[i].name<<" age:"<<pers[i].age<<endl;
}
return 0;
}
结构体中的指针
如果结构体中的指针指向的是动态分配的内存地址:
- 对结构体用sizeof运算符,可能没有意义
- 对结构体用memset函数可能造成内存泄漏
- c++中的sting中有一个指向的是动态分配的内存地址指针。
网友评论