我写了这个简单的代码
void check(uint16_t *m)
{
while(*m!=0x0D) {
if(*m==0x43) //C 0x43
{
... do something
}
*m++;
}
}
.... //在主
中 {
uint16_t buffer[2];
......
check(&buffer);
}
现在我在功能检查中有这个警告,
注意:预期
uint16_t *
但参数类型为uint16_t (*)[2]
我不明白为什么编译器会给我这个错误。
答案 0 :(得分:1)
由于buffer
已经是两个uint16_t
的数组,您需要将uint16_t *
传递给check()
,那么您需要做的就是传递数组本身(因为它只会衰减到指向第一个元素的指针)。
所以,改变:
check(&buffer);
为:
check(buffer);
答案 1 :(得分:1)
您不需要传递地址,只需传递buffer
本身。
check(buffer);
这样做。
因为在函数中它会衰减到指向数组的第一个元素,因此,当你传递buffer
的地址时,它变成指向类型为int16_t (*)[2]
的数组的指针。
因此,当您传递函数不期望的&buffer
时,编译器会发出错误。
答案 2 :(得分:1)
在您的代码中,$.getJSON("Edit/" + data, function (result) {
if(result.success){
console.log(result.data);
} else {
console.log(result.message);
}
})
是一个数组类型,buffer
的类型是指向数组的指针,如&buffer
。
OTOH,你的函数需要一个指向变量的类型指针的参数,比如uint16_t (*)[2]
。
数组名称本身归结为第一个元素的地址,因此只提供指向变量的指针。从函数调用中删除uint16_t *
,编译器会很高兴。