指向数组作为func参数的C指针

指向数组作为func参数的C指针,c,C,我在互联网上看到,指向数组的指针和指向数组第一个元素的指针是一样的。但在CooCox中,下一个调用错误: //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(&TestDataAr

我在互联网上看到,指向数组的指针和指向数组第一个元素的指针是一样的。但在CooCox中,下一个调用错误:

//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])
为什么会这样

InitData(&TestDataArr)
不等于

InitData(&TestDataArr[0])
原因
TestDataArr[0]
等于
*TestDataArr
,然后
InitData(&TestDataArr[0])
等于
InitData(&*TestDataArr)
InitData(TestDataArr)
。 你看,那

InitData(&TestDataArr)
TestDataArr
的地址,并且

InitData(TestDataArr)
只是阵列。
那也是不同的类型

因为他们不是一回事。。。指向数组的指针的类型与指向数组第一个元素的指针的类型不同,即使地址重合。不,它们不是一回事。不要相信你在互联网上找到的所有东西。请阅读本文以获得更详细的解释(不确定它是否是正确的dup)在第一次函数调用中删除
&
,这样会起作用。它们是相同的地址,只是不同的类型。对不起,我弄错了。func init为“void InitData(uint8_*Data)”。类型是相等的否,它们不指向相同的内存
&TestDataArr
是指针,指向
TestDataArr
-变量--(类型为
uint8\u t**
/
uint8\u t[10]*
)。所以它指向指向数据的指针
TestDataArr
直接指向数据执行
&TestDataArr
会导致
uint8\u t(*)[10]
。它不会产生
uint8\u t**
。打印它们。你得到了什么?“它指向指向数据的指针”为什么你认为这样的指针存在于内存中的任何地方?