2021-1-17

今天主要学习了内存函数,以及结构体
1、memcpy:void memcpy(void dest,const void src,size_t num);将src的内存处内容拷贝num个字节到dest的内存中去,不能为重叠拷贝。遇到\0不会停下来。
2、memmove:memmove():重叠拷贝,参数及返回类型和上面一样,是拷贝具有重叠的数据。拷贝的单位为字节。
3、memcmp:memcmp(const void
dest,const void src,size_t num):比较dest和src指向的内容一对一比较num个字节。
4、memset:memset(void
dest,int c,int count)内存设置,将dest指向的数据的count个字节内容改为c。
内存函数主要需要注意一点,其操作的大小都为字节。
结构体
定义及初始化
struct stu
{
char c;
int a;
char arr[];
struct S s;
};这是定义
struct stu s={'a',10,"hello world",{}};这是初始化。
结构体大小求法
首先得明白结构体内存对齐
对齐规则
1、第一个成员存储在偏移量为0的地址处。
2、其他的成员存储在对齐数整数倍的地址处。
对齐数求法
为编译器默认值和成员数据大小中的较小值。
3、结构体大小为其成员最大对齐数的整数倍。
4、如果结构体嵌套了其他的结构体,嵌套的结构体对齐到其内部成员最大的对齐数的整数倍,结构体整体大小为整体对齐数的整数倍。
#pragma pack(4);设置默认对齐数为4.
#pragma pack();取消设置的默认对齐数。
offsetof(结构体名,成员名)求成员偏移量。
结构体传参应该尽量传地址。

猜你喜欢

转载自blog.51cto.com/15085121/2594493