单片机
dzdesigned
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C语言指定初始化器用法解析
C99标准引入的指定初始化器(Designated Initializers),是一种更清晰、更安全的结构体初始化方式。{ .led_gpio_pin = LED0_GPIO_PIN }, // 明确指定成员,顺序无关。{ 0, LED0_GPIO_PIN }, // 必须记住成员顺序。- `.led_gpio_pin` 表示要初始化的具体成员名称。- 其他未指定的成员会自动初始化为0(对于静态存储期的变量)// 初始化多个成员(顺序任意)// 只初始化部分成员。// 数组的多个元素。原创 2025-11-19 14:14:02 · 271 阅读 · 0 评论 -
C语言结构体变量对齐终极篇
变量b 就需要对齐,这个时候编译器就会根据自身对齐值和指定对齐值,来确定变量b的起始地址,自身对齐值4,指定对齐值默认也是4,那么b相对于结构体起始地址的偏移量就是4,地址 1 2 3,就会被空出来,虽然没有数据,但是会算到结构体占用的总空间中。解释一下 成员相对于结构体起始地址的偏移量 也就是成员存储的起始地址 ,假设结构体的起始地址为0,那么第一成员的起始地址就是0,那第二个成员的起始地址是什么呢?假设第一个字节是一个char 类型变量,占用的长度为1个字节,那么第一个成员变量的占用的长度+1。原创 2025-07-12 11:14:54 · 418 阅读 · 0 评论 -
C语言中字符串变量的处理
char *strcat(char *dest, const char *src) strcat() 函数是C语言标准库 <string.h> 中最常用的字符串连接函数。strncat() 函数是 strcat() 的一个更安全的变体,它允许指定最大追加字符数,有助于防止缓冲区溢出。值的注意的是,用strcpy拼接字符串时,复制的起始地址应该是结束符占用的那个地址。strlen() 获取字符串,注意,获取的长度不包含结束符占用的那个字节。第二次拼接时,b的首字符应该复制到上一个结束字符占用的地址。原创 2025-04-21 14:59:07 · 396 阅读 · 0 评论 -
C语言结构体sizeof对齐规则详解
在C语言中,使用sizeof运算符计算结构体的大小时,得到的结果是对齐之后占用的字节数,而非成员变量实际长度的简单相加。这是因为编译器会根据平台的对齐规则,在成员之间或结构体末尾插入填充字节,以优化内存访问效率。每个成员的必须是其类型大小(或编译器指定的对齐值)的整数倍。整个结构体的大小必须是其的整数倍(末尾可能填充)。成员的顺序会影响填充字节的数量。编译器会插入“填充字节”(Padding)以满足对齐要求。默认对齐值通常由目标平台决定(如32位系统通常按4字节对齐)。原创 2025-04-07 15:53:38 · 798 阅读 · 0 评论 -
字模III取模软件生成数组规律分析
以16*16大小的点阵为例,取模方式如图中所示,纵向取模,字节倒序,生成的数组的顺序,先取上半部分,再取下半部分。例如 0010 0000 ,正常是0x20,如果是字节倒序的话就是0x02。选择纵向,就是垂直方向上递增,字节倒序,就是和正常的二进制数权重值相反,从生成的数组我们可以推断出取模的路径是如下方式,原创 2025-03-18 09:06:21 · 308 阅读 · 0 评论 -
字符取模时纵向取模生成数组注意
这里选择纵向取模时发现,生成的数组也是纵向的,如图中的红圈就是第一列的数据,依次类推。接上一篇字节正序和字节倒序,原创 2025-03-17 22:48:02 · 165 阅读 · 0 评论 -
点阵取模中的字节正序和字节倒序
图中点阵 bit 左边为字节高位,右边为字节低位,得到的结果,以0x08,0x08开头,此为字节正序。相反,如果是字节倒序的话,就是0x10,0x10开头,以上取模方式采用横向取模。如果是纵向取模同理。以16*16点阵为例,原创 2025-03-17 22:25:42 · 412 阅读 · 0 评论
分享