【发布时间】:2016-05-18 06:35:16
【问题描述】:
在第二个参数下面的函数声明中是一个指向常量数据的常量指针。
ti_rc_t ti_uart_write_buffer(const ti_uart_t uart, const uint8_t *const data, uint32_t len);
以下是调用该函数的示例代码。为什么在 BANNER_STR 之前有一个(uint8_t *)。这是将指向 const 数据的 const 指针传递给函数的常用语法吗?还有其他有效的语法吗?
#define BANNER_STR ("Hello, world!\n\n")
ti_uart_write_buffer(TI_UART_0, (uint8_t *)BANNER_STR, sizeof(BANNER_STR));
谢谢
【问题讨论】:
-
consts 函数承诺它不会修改指针(这不是很有意义)或指向的数据 - 这不是对调用者的限制(即调用者可以传入const或非const指向const或非const数据的指针)。 -
谢谢,但是当您调用函数时,BANNER_STR 之前的
(uint8_t *)指的是什么? -
它将
BANNER_STR从const char*转换为uint8_t*,然后将其传递给函数。 -
这只是糟糕的代码。不要(错过)那样使用宏。只需用文本定义一个普通的
const变量数组或指针。 -
char和uint8_t通常是不兼容的类型;像这样进行基于指针的别名需要强制转换。您专注于const,但这是一个红鲱鱼。他们本可以写(const uint8_t *)并得到相同的最终结果。强制转换的uint8_t *值结果将隐式转换为const uint8_t *以匹配函数参数
标签: c function pointers arguments