当我宣布这个功能时:
void vLFSR_ParseInput(unsigned char * pucDataArray,unsigned char unCount){}
并尝试将此数组传递给
unsigned char g_ucUSCI_A0_RXBufferIndex = 0x00;
unsigned char g_ucaUSCI_A0_RXBuffer[RXBUFFERSIZE];
使用此函数调用
vLFSR_ParseInput(&g_ucaUSCI_A0_RXBuffer,g_ucUSCI_A0_RXBufferIndex);
我的编译器给了我这个错误
“unsigned char(*)[255]”类型的参数与“unsigned char *”类型的参数不兼容
我做错了什么?如果有帮助,我正在使用TI Code Composer Studio进行编程,而我的平台是MSP430x2xx系列。
编辑:修复格式
答案 0 :(得分:2)
您应该使用:
vLFSR_ParseInput(g_ucaUSCI_A0_RXBuffer,g_ucUSCI_A0_RXBufferIndex);
^ no unary &
数组可以隐式转换为指向其初始元素的指针,因此当您在大多数上下文中使用g_ucaUSCI_A0_RXBuffer
时,它会衰减到指向其初始元素的指针,就像您编写了&g_ucaUSCI_A0_RXBuffer[0]
一样。其类型为unsigned char*
。
将一元 - &
应用于数组时,它会为您提供数组的地址。它具有相同的指针值,但其类型为unsigned char (*)[RXBUFFERSIZE]
。
答案 1 :(得分:0)
在数组中,例如x [10],“x”被视为指向足以容纳10个元素的内存块的指针([]是解除引用此指针以访问此块中各个元素的语法)。
如果您添加&在此之前,您将获取指针的地址,而不是数组内存的地址。也就是说,你创建了一个指向指针的指针,它是一个(char **)而不是(char *)。
只需删除&它会没事的。
答案 2 :(得分:0)
vLFSR_ParseInput(g_ucaUSCI_A0_RXBuffer,g_ucUSCI_A0_RXBufferIndex);
Arrays计算指针文字(大概是指一个数字,其类型是指向数组所用类型的指针)。
您正在获取指针文字的地址(类似于int *x = & 4;
)并尝试将其传递给期望指针的函数。你试图给它一个指针指针。
你是通过参考而不是价值来传递的。在C中按值传递数组需要做很多工作,并且很少完成。