2016-02-08 52 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