这是我的功能
int mkvCopyWord(uint8_t *pBuffer, UINT8 temp):
main()
{
uint8_t a[10];
mkvCopyWord(&a,10);
}
它说警告:注意:预期'uint8_t *'但参数类型为'uint8_t(*)[10]'
如何删除此警告..?
答案 0 :(得分:8)
传递指针到数组的语法很好。但是你试图把它传递给那些想要指针到数组的东西。它只是想要一个指向开始元素的指针。最简单的方法是允许数组名称衰减为指针,即mkvCopyWord(a, 10)
。该函数将假设您指定的指针指向某处uint8_t
的某个序列 - 这就是为什么您必须将数组大小作为另一个参数传递,因为它不知道数组,它只有数组所在的内存中的一些地址。
答案 1 :(得分:5)
您不需要获取数组的地址,因为它隐式转换为指针:
int mkvCopyWord(uint8_t *pBuffer, UINT8 temp):
main()
{
uint8_t a[10];
mkvCopyWord(a,10);
}
答案 2 :(得分:4)
int main(void) //main() without return type isn't a good practice
{
uint8_t a[10];
mkvCopyWord(&a,10);
return 0;
}
这里传递一个类型为“指向10 uint8_t数组的指针”的参数。但是,您的函数被声明为将指针指向int。为了使这个语法有效,你必须改变函数的声明,以获取指向10 uint8_t的数组的指针
void mkvCopyWord(uint8_t (*parr)[10], int n)
这就是语法和类型系统。至于你的实际问题,你需要将指针传递给数组的第一个元素。
mkvCopyWord(&a[0],10);
但是,无论如何都会将数组隐式转换为数组,因此您无需费心。您使用以下内容:
mkvCopyWord(a,10);
HTH
答案 3 :(得分:3)
删除mkvCopyWord(&a,10)
中的&符号:
int mkvCopyWord(uint8_t *pBuffer, UINT8 temp):
main()
{
uint8_t a[10];
mkvCopyWord(a,10); /* <<< removed the ampersand */
}
关于C FAQ中指针和数组的等价性,有很多信息。