爲什麼這樣工作?指向固定大小陣列行爲的指針
uint8_t array[4] = {1,2,3,4};
uint8_t* parray = array;
uint8_t (*p1)[4] = (uint8_t (*)[4])&array;
uint8_t (*p2)[4] = (uint8_t (*)[4])&parray;
uint8_t (*p3)[4] = (uint8_t (*)[4])parray;
uint8_t test1 = **p1; // test1 = 1
uint8_t test2 = **p2; // test2 = something random
uint8_t test3 = **p3; // test3 = 1
粒子陣列顯然是幾乎相同陣列。例如,array [0] == parray [0]。但是當我想要指向數組作爲指向固定大小數組的指針時,我必須使用&符號。當我想要獲得指向parray的指針時,我不能。
實例。
有接受一個指針到固定大小的數組
void foo(uint8_t (*param)[4])
{
...
}
當我在另一個函數的PARAM作爲指針的功能,我可以將它傳遞給FOO這樣?
void bar(uint8_t param*)
{
uint8_t (*p)[4] = (uint8_t (*)[4])param;
foo(p);
}
有沒有更好的方法?
可能您需要從頭腦中清除的第一件事是謊言,在許多介紹性文本中持續存在,即指針和數組「幾乎相同」。他們不是。在某些情況下,使用它們的表達式會產生相同的結果,這就是爲什麼謊言有時似乎是真的。但是,你正在以謊言是謊言的方式使用它們。 – Peter
爲什麼'foo'需要'uint8_t(*)[4]'類型的參數才能開始? –
@DavidBowling如果'bar'要調用'foo',爲什麼'bar'會帶'uint_8 *',那麼期待別的東西。 – user2079303