初始化后立即更改变量?

Sør*_*nHN 1 c struct initialization

我正在使用Nordic Semiconductor的nRF51芯片编写蓝牙网格应用程序,在查看一些示例时,我偶然发现了这些代码:

nrf_mesh_address_t address = {NRF_MESH_ADDRESS_TYPE_INVALID, 0, NULL};
                   address.type = NRF_MESH_ADDRESS_TYPE_GROUP;
                   address.value = GROUP_ADDRESS;
Run Code Online (Sandbox Code Playgroud)

正如我读到的那样,这个片段address首先定义了一些变量,这些变量会立即再次更改.这个双重定义不是不必要的吗?

nrf_mesh_addrees_t看起来像这样的定义:

typedef struct
{
    nrf_mesh_address_type_t type;
    uint16_t value;
    const uint8_t* p_virtual_uuid;
} nrf_mesh_address_t;
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是p_virtual_uuid声明const所以它在定义后无法更改,但是在将代码更改为此时我没有遇到编译错误:

nrf_mesh_address_t address;
                   address.type = NRF_MESH_ADDRESS_TYPE_GROUP;
                   address.value = GROUP_ADDRESS;
                   address.p_virtual_uuid = NULL;
Run Code Online (Sandbox Code Playgroud)

使用不同的变量定义变量两次有什么好处吗?

unw*_*ind 6

是的,这似乎非常多余.

如果您使用的是C99,我建议:

nrf_mesh_address_t address = { .type = NRF_MESH_ADDRESS_TYPE_GROUP,
                               .value = GROUP_ADDRESS,
                               .p_virtual_uuid = NULL };
Run Code Online (Sandbox Code Playgroud)

const指被指向,而不是指针本身的数据.后者将是uint8_t * const p_virtual_uuid.