2017-02-27 134 views
0

我在互聯網上看到指向數組的指針和指向數組的第一個元素的指針是相同的東西。但在CooCox接下來的錯誤提示:C指針作爲函數的參數

//Get Arr 
uint8_t TestDataArr[10]; 
//Func get pointer to arr 
void InitData (TestPacks *Data) 
{ 
//Some code 
} 
//This call error 
InitData(&TestDataArr) 
//But this is norm 
InitData(&TestDataArr[0]) 

爲什麼會發生?

+2

因爲它們不是同一個東西......指向數組的指針與指向數組第一個元素的指針的類型不同,即使地址重合。 – StoryTeller

+0

不,他們不是一回事。不要相信你在互聯網上找到的一切。 –

+0

閱讀此更詳細的解釋(不知道它是否是一個適當的複製)http://stackoverflow.com/questions/42094465/correctly-allocating-multi-dimensional-arrays – StoryTeller

回答

0
InitData(&TestDataArr) 

不等於

InitData(&TestDataArr[0]) 

原因TestDataArr[0]等於*TestDataArr然後InitData(&TestDataArr[0])等於InitData(&*TestDataArr)InitData(TestDataArr)。 你可以看到,

InitData(&TestDataArr) 

TestDataArr和地址

InitData(TestDataArr) 

只是陣列。 這也是不同的類型!

+1

他們*是*相同的地址,只有不同的類型。 –

+0

對不起,我錯了。 func初始化爲'void InitData(uint8_t * Data)'。類型相同 – Reawer

+0

不,他們不指向相同的內存。 '&TestDataArr'是指針,它指向'TestDataArr'變量 - (類型是'uint8_t **'/'uint8_t [10] *')。所以它指向指向數據的指針。 'TestDataArr'直接指向數據。 – cmdLP