我有一大羣uint16_t
。以不同類型訪問陣列成員的正確方法?
其大多數成員是uint16_t
,但有些是int16_t
和一些uint8_t
。
你會如何處理?
順便說,我想:
指針:
使用2個指針,一個
int16_t*
和其他uint8_t*
,既初始化爲數組的開始,訪問部件的陣列是int16_t
和uint8_t
。(即最初的工作,但我遇到了問題時,後面的程序別的東西改變了指針的值,所以我不相信它。)與工會
類型定義。
在file.h:
typedef union { uint16_t u16[NO_OF_WORDS]; // As uint16_t int16_t s16[NO_OF_WORDS]; // As int16_t uint8_t u8[2 * NO_OF_WORDS]; // As uint8_t } ram_params_t; extern ram_params_t ram_params[];
在file.c:
ram_params_t ram_params[] = {0};
(這確實轟炸了。)
鑄造。
(我沒有走得很遠這一點。)
你怎麼知道哪些元素是哪些類型的?你能向我們展示鑄造嘗試嗎?這似乎是最明智的方法,如果他們真的必須是一個單一的數組。 – 2014-11-14 17:57:23
你爲什麼這樣做?爲什麼不只是有其他類型的變量呢?這看起來很容易出錯,而且不可維護? – Degustaf 2014-11-14 19:17:30
>你爲什麼這樣做? - 因爲陣列(在嵌入式系統中)與外部世界共享。外部系統可以訪問該數組,只能訪問該數組。數據是各種類型的。 – 2014-11-14 20:44:47