首页 > 解决方案 > struct类型的一维变量是否在C中变成二维变量

问题描述

我有一个结构类型和一个变量,定义如下:

typedef struct test
{
    uint8_t            a;        
    uint8_t            b;            
    uint8_t            c;            
} test_type;


test_type x[2];

这是否使这个变量表现得像一个二维变量?我的意思是当我调用 x[0] 时,它会返回上面定义的 struct test_type的第一个变量的地址吗?

标签: cstructaddressing

解决方案


如果结构是一个二维数组,则结构的内存布局将是相同的,即 a、b、c 将一个接一个地存储在内存中,但是您需要注意编译器不会在它们之间插入填充。真正的二维没有这个问题。

编译器通常将结构成员与自然地址边界对齐,因此根据变量在结构中的大小,它可能会在结构中的字段之间插入额外的字节。


推荐阅读