1,memcpy:内存拷贝(处理内存不重叠情况)
2,memmove:内存拷贝(处理内存重叠情况)
3,memset:内存设置 void *memset( void *dest, int c, size_t count );
dest:目的地 c:存放的字符 count:操作的字节大小
4,结构体内存对齐规则:
1)第一个成员在与结构体变量偏移量为0的地址处
2)其他成员要对其到对齐数的整数倍地址处
对齐数:编译器默认的一个数与该成员大小的较小值
3)结构体大小为最大对齐数的整数倍
4)如果嵌套了结构体,嵌套的结构体对齐到自己最大对齐数的整数倍初,结构体整体大小为最大对齐数(含嵌套结构体的对齐数)的整数倍
#include<stdio.h>
#include<assert.h>
struct stu
{
char c1;
double c2;
};
int main()
{
struct stu c;
printf("%zd", sizeof(c));
return 0;
}
输出为16
设置对齐数 #pragma pack(4) {默认对齐数为4)
取消对齐数 #pragma pack() {()内不填}
#include<stdio.h>
#include<assert.h>
#pragma pack(4)
struct stu
{
char c1;
double c2;
};
#pragma pack()
int main()
{
struct stu c;
printf("%zd", sizeof(c));
return 0;
}
输出为12
5,offsetof:计算结构体成员的偏移量 size_t offsetof( structName, memberName );
#include<stdio.h>
#include<stddef.h>
struct stu
{
char c1;
int i;
double c2;
};
int main()
{
struct stu c;
printf("%zd\n",offsetof(struct stu, c1));
printf("%zd\n",offsetof(struct stu, i));
printf("%zd\n",offsetof(struct stu, c2));
return 0;
}
输出0 4 8