组装,当数据元素类型不一样时,程序员组装新的数据类型。。
关键字 struct Liujian // 定义一种新类型
{
char name [20];
int age; //数据元素类型
char addr[120];
double soore;
};
分配字节数20+4+120+8=152(首地址对齐,并且是最大偏移量的整数倍)
int main()
{
Liujian a1; //使用结构体
Liujian a2{ “张三”,“18”,“南阳”,“88”};//初始化结构体哦
a1=a2;
a1.name = “张三”; //buxing ,因为数组没分配空间
a1.age = 18 ;可以
include《cstring》 需要头文件
可以通过更好方法 strcpy(字符数组名,字符串);
strlen(字符串或字符数组名)字符长度
strcmp(str1,str2) 比较两个字符串
strcat(字符数组名,字符串) 将后面的字符串追加到数组名的字符串后头
}
include <iostream>
//#include <algorithm>
using namespace std;
struct Student{
int age;
char name;
double score;
float hear;
short two;
//偏移量分析:1.首地址对其 2.总字符量占最大偏移量的整数倍 4+1+3+8+4+2+2 =24 (最后一个二是因为,总字符量不是8的整数倍,自动补全)
};
struct Student{
int age;
char name[20];
double score;
float hear;
short two;
//偏移量分析:1.首地址对其 2.总字符量占最大偏移量的整数倍 4+20+8+4+2+2 =40 (最后一个二是因为,总字符量不是8的整数倍,自动补全,并且在char分配中是一个一个分配的,不是一下分配20个字节给name)
};
main()
{
Student a1;
cout << sizeof(a1) <<endl;
return 0;
}
pragmapack(push) //保存对齐状态
pragmapack(4)//设定为4字节对齐
struct test
{
char m1;
double m4;
int m3;
};
pragmapack(pop)//恢复对齐状态
以上结构的大小为16,下面分析其存储情况,首先为m1分配空间,其偏移量为0,满足我们自己设定的对齐方式(4字节对齐),m1占用1个字节。接着开始为m4分配空间,这时其偏移量为1,需要补足3个字节,这样使偏移量满足为n=4的倍数(因为sizeof(double)大于n),m4占用8个字节。接着为m3分配空间,这时其偏移量为12,满足为4的倍数,m3占用4个字节。这时已经为所有成员变量分配了空间,共分配了16个字节,满足为n的倍数。如果把上面的#pragmapack(4)改为#pragma pack(8),那么我们可以得到结构的大小为24。