Как передать в функцию указатель на массив?

У меня есть вот такой код на С:
static uint8_t uart_command_buf[42];
...
void uart_packet_damp(uint8_t uart_command_buf[]) {
    for(int i = 0; i <= 41; i++)
    {
        printf("0x%02X ", uart_command_buf[i]);
    }
}
...
uart_packet_dump(uart_command_buf);


Как мне переписать его, чтобы передавать туда указатель на массив, а не копию массива? В лоб не получается(точнее, собирается, но ругается):
static uint8_t uart_command_buf[42];
...
void uart_packet_dump(uint8_t *uart_command_buf[]) {
    for(int i = 0; i <= 41; i++)
    {
        printf("0x%02X ", *uart_command_buf[i]);
    }
}
...
uart_packet_dump(&uart_command_buf);


ud-rpl_root.c: In function 'char_in':
ud-rpl_root.c:151:26: warning: passing argument 1 of 'uart_packet_dump' from incompatible pointer type [-Wincompatible-pointer-types]
         uart_packet_dump(&uart_command_buf);
                          ^
ud-rpl_root.c:117:1: note: expected 'uint8_t ** {aka unsigned char **}' but argument is of type 'uint8_t (*)[42] {aka unsigned char (*)[42]}'
 uart_packet_dump(uint8_t *uart_command_buf[]) {
 ^~~~~~~~~~~~~~~~
  • Вопрос задан
  • 1157 просмотров
Решения вопроса 1
@Wexter
Должно быть void uart_packet_dump(uint8_t *uart_command_buf)
uint8_t *uart_command_buf[] аналогично uint8_t **uart_command_buf
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
В С нельзя передавать массив по значению.
void uart_packet_damp(uint8_t uart_command_buf[])
Здесь передача по указателю происходит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы