【问题标题】:What arguments should I send to this function我应该向这个函数发送什么参数
【发布时间】:2021-12-06 16:03:10
【问题描述】:

我有一个 C 函数:

 * \fn int32_t readMyData(uint8_t *dStatus, uint8_t *dData, uint8_t *dCRC)
 * \param *dStatus pointer to address where STATUS byte will be stored
 * \param *dData pointer to starting address where data bytes will be stored
 * \param *dCRC pointer to address where CRC byte will be stored
 * \return 32-bit sign-extended conversion result (data only)

int32_t readMyData(uint8_t status[], uint8_t data[], uint8_t crc[])

我不习惯指针,你能帮我吗,我应该在我的 Main 函数中初始化什么样的变量才能调用 readMyData?在原型的参数中它是数组:uint8_t status[], uint8_t data[], uint8_t crc[] 但在函数的 cmets 中它指向:dStatus 指向地址的指针。

我应该定义:

uint8_t *status, *data, *crc
int32_t result =0;

然后调用函数;

result = readMyData(&status,&data,&crc);

有意义吗?

谢谢

【问题讨论】:

  • 不,那行不通。函数描述为dData 参数说:“数据字节将被存储在哪里”。注意复数。它期望您传递足够大小的uint8_t 数组。我不知道那个尺寸应该是多少。

标签: c pointers arguments


【解决方案1】:

如果文档/规范声明参数是指针,那么应该使用指针而不是数组声明(尽管不是错误,而是语义)。

所以你的函数原型应该像文档中的样子:

int32_t readMyData(uint8_t *dStatus, uint8_t *dData, uint8_t *dCRC);

此外,参数的描述指出,这些是指向特定数据将被存储的地址的指针,所以如果你想调用该函数,你必须提供/定义 存储。

例如

uint8_t dStatus;         //single byte, no array needed
uint8_t dData[NUM_DATA]; //NUM_DATA some arbitrary number
uint8_t dCRC[NUM_CRC];   //NUM_CRC some arbitrary number

//invoke
int32_t result = readMyData(
    &dStatus /* usage of address of operator */,
    dData /* no usage of & needed, array decays to pointer */,
    dCRC /* same as dData */
);

数组到指针转换的更多信息:

【讨论】:

    猜你喜欢
    • 2019-09-18
    • 2019-03-10
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多