C 具有静态常量成员的动态分配数组

C 具有静态常量成员的动态分配数组,c,arrays,dynamic,static,nrf51,C,Arrays,Dynamic,Static,Nrf51,如何定义和使用一个动态分配的数组,其成员是静态常量 背景:我需要执行上述操作,以存储运行时请求的几个事务。snipet bellow举例说明了如何定义事务。此代码使用Nordic Semiicondicator nRF5x SDK static app_twi_transfer_t const transfers[] = { APP_TWI_WRITE(MMA7660_ADDR, p_reg_addr, 1, APP_TWI_NO_STOP), APP_TWI_READ (MM

如何定义和使用一个动态分配的数组,其成员是
静态常量

背景:我需要执行上述操作,以存储运行时请求的几个事务。snipet bellow举例说明了如何定义事务。此代码使用Nordic Semiicondicator nRF5x SDK

static app_twi_transfer_t const transfers[] =
{
    APP_TWI_WRITE(MMA7660_ADDR, p_reg_addr, 1, APP_TWI_NO_STOP), 
    APP_TWI_READ (MMA7660_ADDR, p_buffer,   byte_cnt, 0)
};

static app_twi_transaction_t const transaction =
{
    .callback            = read_mma7660_registers_cb,
    .p_user_data         = NULL,
    .p_transfers         = transfers,
    .number_of_transfers = sizeof(transfers)/sizeof(transfers[0])
};

APP_ERROR_CHECK(app_twi_schedule(&m_app_twi, &transaction));
如何定义和使用成员为静态常量的动态分配数组


你不能。阵列的成员必须与阵列本身具有相同的存储类和链接,因此动态分配的阵列不能具有静态成员。但是,这样的数组可以具有具有静态存储类和/或链接的对象的副本或指针。

您不能静态初始化动态分配数组的成员:标准库提供的仅有两个选项未初始化,即
malloc
,以及零初始化,即
calloc

如果要将数组的元素初始化为任何其他元素,则需要自己执行赋值。C允许您直接分配
struct
s,因此初始化
struct
s数组与初始化原语数组没有太大区别

下面是一个小例子:

// This is your struct type
typedef struct {
    int a;
    int b;
    int c;
} test_t;
// This is some statically initialized data
test_t data[] = {
    {.a=1, .b=2, .c=3}
,   {.a=10, .b=20, .c=30}
,   {.a=100, .b=200, .c=300}
};
int main(void) {
    // Allocate two test_t structs
    test_t *d = malloc(sizeof(test_t)*2);
    // Copy some data into them:
    d[0] = data[1];
    d[1] = data[2];
    // Make sure that all the data gets copied
    printf("%d %d %d\n", d[0].a, d[0].b, d[0].c);
    printf("%d %d %d\n", d[1].a, d[1].b, d[1].c);
    free(d);
    return 0;
}
上面看起来像常规分配的内容,例如
d[0]=data[1]
,将静态初始化的
data[1]
的内容复制到动态初始化的
d[0]


您的帖子中没有
静态常量
成员,在
应用程序twi\u事务
结构中也没有。帖子中也没有动态分配的数组@LPs什么是“静态应用程序twi\u事务\u t常量事务”?没有数组,因为问题是如何在代码段上定义类型数组@是一个变量。。。?