动态分配的数组包含静态const成员

时间:2016-03-11 17:57:30

标签: c arrays dynamic static nrf51

如何定义和使用动态分配的数组,其成员为static const

背景:我需要执行上述操作,以存储运行时请求的多个事务。 snipet bellow举例说明了如何定义事务。此代码使用Nordic Semiicondictor 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));

2 个答案:

答案 0 :(得分:2)

  

如何定义和使用动态分配的数组,其成员是静态const?

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

答案 1 :(得分:1)

您无法静态初始化动态分配的数组的成员:标准库提供的唯一两个选项是未初始化,即$builder = new AnnotationBuilder($this->_em); $builder->setFormFactory(new EntityFormFactory()); 零初始化,即malloc

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

这是一个小例子:

struct

看起来像上面的常规作业,例如// 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]

Demo.