Как мне вызвать эту функцию?
Пример вызова
typedef struct {
uint8_t addr_id :1;
uint8_t addr_type :7;
uint8_t addr[6];
} address_t;
// 1st const, 2nd const
// v---v v---v
int some_function(address_t const * const * my_addrs, uint8_t length) {
(void) my_addrs;
(void) length;
return 0;
}
int foo() {
const address_t addr1 = { .addr_id = 1, .addr_type = 3, .addr = { 1,2,3,4,5,6 } };
const address_t addr2 = { .addr_id = 1, .addr_type = 3, .addr = { 1,2,3,4,5,6 } };
const address_t addr3 = { .addr_id = 1, .addr_type = 3, .addr = { 1,2,3,4,5,6 } };
Обратите внимание на изменение типа my_whitelist[]
. Это должен быть массив указателей. Эти указатели должны указывать на const
данные из-за 1st const
выше.
// address_t my_whitelist[6];
const address_t *my_whitelist[6];
my_whitelist[0] = &addr1;
my_whitelist[1] = &addr2;
my_whitelist[2] = &addr3;
my_whitelist[3] = &addr1;
my_whitelist[4] = &addr2;
my_whitelist[5] = &addr1;
uint8_t len = sizeof my_whitelist / sizeof my_whitelist[0];
Обратите внимание: my_whitelist[]
делает не необходимым для const
из-за 2nd const
выше, как с const address_t * const my_whitelist[6];
. Это 2nd const
выше сообщает вызывающему коду, что some_function()
не изменит элементы массива my_whitelist[]
.
return some_function(my_whitelist, len);
}
Примечание. Если my_whitelist[]
был массивом const
, его значения не могут быть назначены , но могут быть инициализированы .
// Example usage with a `const my_whitelist[]`
const address_t * const my_whitelist[] = { &addr1, &addr2, &addr3 };
Примечание: address_t const *
похоже на const address_t *
. Начало с const
соответствует стилю спецификации C.
address_t const * const * my_addrs;
// same as
const address_t * const * my_addrs; // More common