如何在函数中传递“指向数组的指针”

时间:2011-08-01 09:42:46

标签: c

这是我的功能

int mkvCopyWord(uint8_t *pBuffer, UINT8 temp):

main() 
{
uint8_t a[10];
mkvCopyWord(&a,10);
}

它说警告:注意:预期'uint8_t *'但参数类型为'uint8_t(*)[10]'

如何删除此警告..?

4 个答案:

答案 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中指针和数组的等价性,有很多信息。