由于 Misra C 的要求,我的一位同事想要使用指针声明时遇到了一些问题。Misra(安全关键指南)不会让我们单纯的程序员使用指针,而是让我们对数组字节进行操作。他打算获取一个指向字节数组的指针(所以我们不会在堆栈上传递实际的数组。)
// This is how I would normally do it
//
void Foo(uint8_t* pu8Buffer, uint16_t u16Len)
{
}
// This is how he has done it
//
void Foo(uint8_t (*pu8Buffer)[], uint16_t u16Len)
{
}
调用函数看起来像;
void Bar(void)
{
uint8_t u8Payload[1024]
uint16_t u16PayloadLen;
// ...some code to fill said array...
Foo(u8Payload, u16PayloadLen);
}
但是,当在 Foo() 中访问 pu8Buffer 时,数组是错误的。显然没有通过它所期望的。数组在调用函数中是正确的,但在 Foo() 中不正确
我认为他创建了一个指向字节的指针数组,而不是指向字节数组的指针。
有人愿意澄清吗?Foo(&u8Payload, u16PayloadLen); 也不行。