2016-02-08 50 views
2

在下面的函数声明中,第二个参数是一个const指针指向const数据。c语法将常量指针的const指针传递给常量数据

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指针传递给一个常量数据到一个函数?还有其他有效的语法吗?

#define BANNER_STR ("Hello, world!\n\n") 
ti_uart_write_buffer(TI_UART_0, (uint8_t *)BANNER_STR, sizeof(BANNER_STR)); 

由于

+0

了'const's存在由功能的承诺,它不会修改指针(不是有意义的)或指向的数据 - 它不是对调用者的限制(即调用者可以将'const'或非'constst'指针传递给'const'或非-const'数据)。 –

+0

谢谢,但是当你调用这个函数时,BANNER_STR之前的'(uint8_t *)'是指什么? –

+1

它将'BANNER_STR'从'const char *''强制转换为'uint8_t *',然后传递给函数。 –

回答

2

的限定BANNER_STR是字符作为它的类型的数组,换句话说的字符串。因此,在你的函数调用中,你需要强制使用这个参数来避免编译器警告,但这是调用这个函数的有效方法。

的其他有效的语法是不是使用定义指令来声明常数变量,它包含字符串写:

const char banner_str[] = "Hello, world!\n\n"; 
ti_uart_write_buffer(TI_UART_0, (uint8_t *)banner_str, sizeof(banner_str)); 
+0

。 –

+0

你是对的,也许“有效”对此更“正确” – Frodo