2021-1-17
16lz
2021-01-22
今天主要学习了内存函数,以及结构体
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(结构体名,成员名)求成员偏移量。
结构体传参应该尽量传地址。
更多相关文章
- 注册中心 Eureka 源码解析 —— 项目结构简介
- Redis 哈希结构内存模型剖析
- 从一份定义文件详解ELK中Logstash插件结构
- SpringBoot 中 @SpringBootApplication注解背后的三体结构探秘
- 数据结构之集合和映射
- HCIA-以太网帧结构-OSI模型
- C语言 循环结构和选择结构(1)
- 如何更好地结构化表示一个 URL?
- 带你一步步设置layui的tree树结构点击高亮